一:问题描述
当前会话默认是latin1字符集,而插入的内容为中文时,在client为utf8下查看会出现乱码。
character_set_client,character_set_connection,character_set_results为latin1,说明通过mysql -u -p连接的客户端字符集是latin1
在命令行插入数据:
在当前会话下可以正常查询。
但是在navicat里查询出现乱码:
Navicat默认客户端字符集是utf8.
指定当前会话为utf8时,然后查询该数据,也会出现乱码。
二:出错原因
字段字符集与客户端字符集不一致。
查看列字符集编码:
说明该列字符集是utf8.
三:解决方法
修改客户端默认字符集为utf8。
在[mysql]字段里加入default-character-set=utf8,如下:
[mysql]
no-auto-rehash
default-character-set=utf8
或者
[mysqld]
init_connect='SET NAMES utf8'
修改完成后,service mysql restart重启mysql服务就生效。
补充介绍:[mysqld]字段里假如加入character-set-server=utf8,这个修改的参数是:character_set_server和character_set_database
四:已乱码数据处理
那由于插入数据时的会话字符集为latin,导致在client出现乱码的那些数据,要先删除再重新插入。
--后记,这个需要重启服务器,不知道有没有其他更好的办法。
欢迎大家拍砖指正。