免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5587 | 回复: 7
打印 上一主题 下一主题

MYSQL中文乱码 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-01-22 12:03 |只看该作者 |倒序浏览
请教:
我是用access2003(VBA)+ODBC+MYSQL做开发的,
一台服务器(简体中文windows XP版)安装了mysql (英文 5.019 nt版),发现用mysql command line client/mysql query browser 查看带中文资料显示乱码,像  " 翠ぶバ?脀方?キ刁8腹" ,
但用Access2003链接这些表打开查看时并不乱码,知道为什么吗?

论坛徽章:
0
2 [报告]
发表于 2008-01-22 17:58 |只看该作者
我用
show variables like 'character_set_%';查看,结果如下

    character_set_client utf8
  character_set_connection utf8
  character_set_database utf8
  character_set_results  utf8
  character_set_server utf8
  character_set_system utf8


都是UTF8了,怎么还会在mysql command line client里显示乱码呢

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2008-01-22 19:31 |只看该作者
先执行 set names utf8

论坛徽章:
0
4 [报告]
发表于 2008-01-24 16:35 |只看该作者
试了还是乱

论坛徽章:
0
5 [报告]
发表于 2008-01-24 16:36 |只看该作者
理解后编码的一致性后修正一下以前的信息:
现在的情况是这样子的,用access2003链接下来的表中中文字不会乱,用mysql   command   client   line/mysql   query   browser查看中文是乱码,
mysql数据中所有的编码(show   varables   like   'character_set_%'命令)信息:
character_set_client     ¦utf8
character_set_connection     ¦utf8
character_set_database     ¦utf8
character_set_filesystem   ¦binary
character_set_results     ¦utf8
character_set_server     ¦utf8
character_set_system     ¦utf8   也就是数据库中所有的编码都是UTF8
但我的mysql   odbc   3.51中没有设置   SET   NAMES   UTF8,或set   names   GBK(可能是这个影响了)
没设置留空了,请问一下是不是这个client端没设置统一的编码造成的?我试着现在补上SET   NAMES   UTF8,但变成不能插入中文了,要设置成set   names   GBK才可以,用了set   name   GBK后而且用mysql   command   client   line/mysql   query   browser查看刚插入的中文也不乱码了,access中的刚插入的中文也不乱了,但以前的中文数据却乱了,痛苦哦,,,,
不过这个也不是问题,可以导出原来的资料再利用GBK编码导进去,我也尝试了,成功没问题,
之后我把这个没问题的MYSQL中的一个库backup出来传去香港一个服务器上(繁体中文系统,mysql版本一样都是5.19   NT)并导入mysql中,准备做master/slave,但问题来了,在香港服务器上的那个没问题的库却出现了乱码(mysql   command   client   line/mysql   query   browser或access2003
查看都乱),香港那服务器上的mysql设置和大陆这边的一样,所有的编码都是UTF8唯独mysql   odbc   3.51没设置set   names之类的,但我不觉得是ODBC没设置的原因,用mysql   command   client   line/mysql   query   browser根本就不用ODBC.

大家有好的看法吗

论坛徽章:
0
6 [报告]
发表于 2008-01-24 17:29 |只看该作者

论坛徽章:
0
7 [报告]
发表于 2008-01-29 11:38 |只看该作者
set names gbk

论坛徽章:
0
8 [报告]
发表于 2008-01-29 15:39 |只看该作者
原帖由 雨农 于 2008-1-24 16:36 发表
理解后编码的一致性后修正一下以前的信息:
现在的情况是这样子的,用access2003链接下来的表中中文字不会乱,用mysql   command   client   line/mysql   query   browser查看中文是乱码,
mysql数据中所有 ...


字符集问题一直是个头痛的问题。
从楼主之前的情况来看,一开始windows client端显示乱码,是因为设置服务器使用的是utf8编码,客户端提交和返回用的也是utf8编码,简体中文windows xp 命令窗口只支持gb系列编码,不认utf8,所以乱码。
SET  NAMES GBK 就是告诉mysql客户端使用的是GBK,此时尽管服务端还是使用utf8存储数据,此时客户端接受到的都是“翻译”后的GBK编码,同时客户端提交中文的话也需要是GBK,否则就会出问题。
那么同理:假设存到数据库的已经是正常的utf8数据,在繁体windows xp 命令窗口查看数据需要先 SET  NAMES BIG5 才可以。

注意:上面的前提都是假设建立的表的字符集正确( utf8 ),可以使用 show create table tablename; 查看。一定要确认 DEFAULT CHARSET=utf8。否则后果很严重......

如果不是命令窗口,而是应用程序作为客户端的话,情况有可能又复杂了一些,因为应用程序很有可能会出现正好编码“负负得正,将错就错的情况”,此时就容易出现一些奇怪的问题,比如存进某个汉字会变成另一个,汉字搜索、排序问题等等。

如果要做跨国家、跨地区的软件的话,有两种方案:
1. 从客户端到服务器端都使用utf8,这样比较可控。当然负面影响是:读写数据库时需要自己做过滤程序去转换编码,特别是写,一定要是utf8。
2. 应用程序使用多编码,根据需要反复使用 SET  NAMES 切换。

当然推荐的还是第一种。

[ 本帖最后由 sunnyfun 于 2008-1-29 15:57 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP