分享
 
 
 

MySQL字符集产生乱码的简单讲解

王朝mysql·作者佚名  2008-05-18
窄屏简体版  字體: |||超大  

//标题:MySQL字符集简单讲解(个人总结)

//作者:dx_andy

//时间:2007.8.27 晚

//测试环境:win32 MySQL 5.0.45

//原因:自己的MySQL出现乱码问题

MySQL自4.1版本推出之后为我们国人带来的乱码问题也随之风弥整个互联网。主要原因就是不同字符集编码不同而产生的。

先说一下MySQl的配置中都有哪几种字符集:

MySQL 4.1的字符集支持(Character Set Support)有两个方面字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。

我们可以用下面命令检查MySQL当前字符集信息:

show variables like “character_set_%”;

show variables like “collation_%”;

MySQL4.1或以上版本的系统预设的编码是UTF-8,而我们的中文编码为:GBK,GB2312,BIG5……所以当我们把中文被当做别的字符集转 化为UTF-8的字符集,再存入数据库时就会出现部分文字代码丢失而产生乱码。这就是我们查询数据库得到这些数据显示到网页上的就是“????”或乱码的 原因。

解决办法吗?当然也很简单,网页上随便一搜就能搜到。

解决办法(1)就是在插入数据之前先设置一下MySQL的字符集,即:mysql_query(“set names gbk”) 或是将gbk改为gb2312 或是别的中文字符集。然后再执行插入操作。

《特》《别》《声》《明》

上面的办法在我电脑上测试成功。

但我多少感觉有些不舒服,每次查询前都要写mysql_query(‘set name gbk’);。这一点我挺不满意的。于是我又开始搜索,结果我找到了下面将要讲到的配置方法

解决办法(2):配置my.ini文件。打开my.ini 找到 [mysql] 找到default-character-set 如果你的mysql是默认安装的话这里应该是:utf8。这时将它改为:gbk或是gb2312就行了。( 即不在查询前加入mysql_query (“set names gbk”) )

《又》《出》《问》《题》《了》

我照上面的方法改了不知多少次,从gbk改到gb2312又改到utf8始终没能成功。我想了想,既然网页传值不能成功那么在命提示符下是什么样子的呢。

于是我用命令提示符打开了MySQL。测试发现在命令提示符下操作MySQL一切正常。弄到这里我的头都大了。

我又重新配置了一下PHP环境,下载的最新AppServ 2.5.9。检查一下MySQL字符集,默认字符集是UTF8。

MySQL命令:(show variables like “character_set_%”;)

然后我在不执行(mysql_query(“set names gbk”))时向数据库执行插入,查询操作,在网页上一切都显示正常。呵呵,真是怪了!

为什么中文字却能不加转换的插入到数据库中?

又为什么中文字能不加转换的从数据库中得到正确数据?

带着这两个问题我又打开命令提示符。执行查询操作,结果显示的全是乱码(当时我想的是:文字应该为GBK编码)。于是我又执行:set names gbk; 把这个数据库字符集改为GBK字符集。再执行查询结果显示的全部是问号。这到底是怎么回事,我真的不想再研究了。

我一气之下把my.ini文件的[mysql]栏的default-character-set 注释掉了。重启MySQL后,又执行了一下操作,结果真是大出意料呀,居然正常显示了。我兴奋的不的了。结果我又查询了一下当前mysql的字符集:呵呵 居然是latin1。难道是这里在做怪?然后我用PHP插入数据,查询数据库(不执行 mysql_query(“set names gbk”)),结果照样显示正常。哈哈,问题终于找到了,原来真是这里在做怪!!!

我想看到这里大家已经应该明白了,下面我做一个小总结吧。

《最》《后》《总》《结》(只是个人见解,不负任何法律责任哦!)

(1) 在mysql5.0.45环境下,数据库把由PHP传递的数据默认为latin1 (ISO-8859-1) 字符集来处理。即把latin1转换为UTF-8,然后插入。

(2) 当PHP向MySQL数据库中插入数据前执行(mysql_query(“set names gbk”))MySQL才会以PHP查询中指定的字符集(gbk)转换为UTF-8后插入。

(3) CMD模式下操作MySQL,和用PHP操作在字符集处理上是两种概念。CMD下操作MySQL,MySQL会把CMD下的数据默认为MySQL默认的字符集转换为UTF-8后处理。而处理PHP数据MySQL会默认为 latin1 数据做处理。

《《《----我最后的配置----》》》:

因 为我只是在本地作测试,为了测试时少写一行mysql_query(“set names gbk”)。所以我把 my.ini 的 [ mysql ] 栏default-characte_set 改为 latin1。这样无论自己在本地测试或是CMD下操作MySQL都很方便。但是如果你用的是PHPMyAdmin的话,可能会显示乱码,解决办法就是安 装一个支持字符集为 latin1的PHPMyAdmin。字符集和字符集校对都为 latin1 ,就能正常显示了。

《关》《于》《数》《据》《库》《备》《份》

因为mysql4.1之前采用的中文字符集为 gbk 或 gb2312。建议备份和恢复数据库前先执行 set name gbk ;命令即可解决乱码问题。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有