toad for mysql编码_Toad fro MySQL 6.0 的客户端中文字符编码问题

当Mysql服务器字符集为latin1时,Toad for MySQL 5.0 Freeware在修改数据库操作中可能出现中文乱码。解决方法包括:了解MySQL的字符集设置层次,修改服务器配置文件将default-character_set或character-set-server设为utf8,或者在启动命令行中添加相应参数。此外,可以通过设置客户端连接字符集暂时解决问题。
摘要由CSDN通过智能技术生成

对于Mysql安装的时候如果没有设置utf8编码,而是使用了默认的latin1,则默认情况下,创建的数据库和表也默认latin1,创建表的时候显式指定utf-8也可以,也能存储中文字符。不过,如果在一个latin1的database下面访问一个utf-8的database里面的表里面的中文,同样可能出现乱码。

Toad fro MySQL 4.6 Freeware中连接设置窗口中能够设置是否使用Unicode,所以能够灵活地根据服务器上字符集的设置调整本地字符集设置,从而免除中文乱码的烦恼。

不过,最近Toad fro MySQL 5.0 Freeware版本(5.0.0.345)发布后,声称其内置Unicode支持,但是在连接我的一个测试环境的时候,查询获得的中文都没有问题,但是修改数据库的操作中涉及的中文都导致了乱码。一下是一种解决方法。

1)背景知识——MySQL的字符集设置,以下摘自网上。

mysql4.1及其之后的版本,对字符集的支持分为四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection):

character_set_server:这是设置服务器使用的字符集

character_set_client :这是设置客户端发送查询使用的字符集

character_set_connection :这是设置服务器需要将收到的查询串转换成的字符集

character_set_results :这是设置服务器要将结果数据转换到的字符集,转换后才发送给客户端

整个过程:

- client(如php程序)发送一个查询;

- 服务器收到查询,将查询串从character_set_client 转换到character_set_connection,然后执行转换后的查询;

- 服务器将结果数据转换到character_set_results字符集后发送回客户端。

你可以用下边两条命令查看一下系统的字符集和排序方式设定:

mysql> SHOW VARIABLES LIKE ‘character_set_%’;

mysql> SHOW VARIABLES LIKE ‘collation_%’;

+--------------------------+---------------------------------+

| Variable_name            | Value                           |

+--------------------------+---------------------------------+

| character_set_client     | latin1                          |

| character_set_connection | latin1                          |

| character_set_database   | latin1                          |

| character_set_filesystem | binary                          |

| character_set_results    | latin1                          |

| character_set_server     | latin1                          |

| character_set_system     | utf8                            |

| character_sets_dir       | D:""share"charsets" |

+--------------------------+---------------------------------+

mysql 默认用的字符集是latin1,连接校对用的latin1-_swedish_ci。看到这儿你应试有点明白了,我们通过php发送的查询一般是utf8或者GBK,GB2312,而它默认的是latin1,所以用phpmyadmin查看或者直接进数据库里查看数据,都是一些乱码。(存取出来放在网页上大多是正常的。)phpmyadmin在对mysql4.0以下会使用内置的库来实现字符集的转换,从而支持多语言版本,而对于4.1以上则完全交给Mysql。所以以上几个层次的转换如果有字符集不匹配的情况,出现乱码就很容易理解了。说了半天,其实你只要把上述变量设置一致了,不管是直接在数据库里查看,还是在phpmyadmin里查看都不会出现中文乱码了。

假如你的系统和php网页是utf8编码,你可以将mysql的编码由默认的latin1改为utf8.

编辑mysql的配置文件,/etc/,在[mysqld]中设置default-character-set=utf8即可。不过原来的数据,假如你用4.0,mysqldump出来的数据是latin1的编码,你再导入就会出现乱码。如果你原来的数据非常宝贵,那你还是用latin1编码吧。

2)有了以上的背景知识,发现问题原因出在中文环境下Toad fro MySQL 5.0 Freeware连接服务器后,variables中显示的本地字符集为latin1,而Toad fro MySQL 4.6 Freeware勾选Unicode支持时variables中显示的是utf8。然后再看MySQL服务器上,尽管database的字符集设置的是utf8,但是character_set_system变量显示的是latin1,所以问题的原因应该是:Toad fro MySQL 5.0 Freeware连接MySQL时,会根据服务器上character_set_system或者character-set-server的设置设置本地的字符集。所以,在mysql启动的命令行中添加--default_character_set=utf8(5.1中已经不建议使用,已--character-set-server替代),重新用Toad fro MySQL 5.0 Freeware连接,问题解决。(对于linux环境下,可以在/etc/my.cnf文件中添加character-set-server=utf8)。

追加:对于mysql自带的命令行工具mysl.exe,它会读取my.ini文件中的[mysql]段下的defautl-character-set设置,所以对于中文客户端可以设置为gbk。此外,可以使用set charset gbk设置当前连接客户端使用的字符集,Toad fro MySQL 5.0 Freeware默认情况下会使用相同的连接,在设计中文字符问题的操作前使用此语句(只需要执行一次),也能凑效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值