IT-Homer 专栏
成功是优点的发挥,失败是缺点的积累! 不为失败找理由,只为成功找
方法……
MySQL字符集中文乱码终极解决方案和mysql查询中文问题解决方法[转贴]
分类: SQL Index 2010-01-04 17:44 1665人阅读评论(0) 收藏举报
MySQL字符集终极解决方案[转贴]
开源数据库MySQL从来都是中小企业构建web应用的首选,特别是和PHP配合简直就是一对黄金搭档,深受web开发人
员的喜爱。,很多MySQL使用者发现中文居然不能使用了,显示变成了一
堆乱码!,最近上MySQL网站,,MySQL已
。好在我还留有一份windows版的copy,就当作纪念吧。
怎么会产生乱码现象的,怎么解决?只要翻下网上的解决方案,马上就可以得出答案:“在获得连接之后执行一句
set names 'gb2312'”,但这样做的原因是什么呢?总结一下我的经验。
MySQL处理连接时,外部连接发送过来的SQL请求会根据以下顺序进行转换:
character_set_client //客户连接所采用的字符集
|
character_set_connection //MySQL连接字符集
|
character_set_database //数据库所采用的字符集(表,列)
|
character_set_results //客户机显示所采用的字符集
一. 产生乱码的根本原因在于:
,导致原先的SQL语句被转换成connection所指字符集,而这种转换,是会丢
失信息的,如果client是utf8格式,那么如果转换成gb2312格式,这其中必定会丢失信息,反之则不会丢失。一定
要保证connection的字符集大于client字符集才能保证转换不丢失信息。
2. 数据库字体没有设置正确,如果数据库字体设置不正确,那么connection字符集转换成database字符集照样丢失
编码,原因跟上面一样。
names 'gb2312'就可以了呢
set names 'gb2312'相当于这三条语句:
set character_set_client = gb2312;
set character_set_connection = gb2312;
set character_set_results = gb2312;
这样做的话,上述产生乱码的原因1就不存在了,因为编码格式都统一了,但是这样做并不是万金油。原因有:
,如果编码不是gb2312那么转换成gb2312就会产生问题。
,如果不是gb2312格式而是其他的比如说latin1,那么在存储字符集的时
候就会产生信息丢失。
综上,终极解决方案如下:
,这是最重要的(IE6一般用utf8,命令行一般是gbk,一般程序是
MySQL字符集中文乱码终极解决方案和mysql查询中文问题解决方法[转贴] 来自淘豆网m.daumloan.com转载请标明出处.