mysql查询中文出现乱码

一:问题描述

当前会话默认是latin1字符集,而插入的内容为中文时,在client为utf8下查看会出现乱码。

 mysql查询中文出现乱码_第1张图片

character_set_client,character_set_connection,character_set_results为latin1,说明通过mysql -u -p连接的客户端字符集是latin1

 

在命令行插入数据:

 

在当前会话下可以正常查询。

mysql查询中文出现乱码_第2张图片

但是在navicat里查询出现乱码:

 mysql查询中文出现乱码_第3张图片

 

Navicat默认客户端字符集是utf8.

 mysql查询中文出现乱码_第4张图片

指定当前会话为utf8时,然后查询该数据,也会出现乱码。

 mysql查询中文出现乱码_第5张图片

 mysql查询中文出现乱码_第6张图片

二:出错原因


字段字符集与客户端字符集不一致。 

查看列字符集编码:

 mysql查询中文出现乱码_第7张图片

说明该列字符集是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_servercharacter_set_database

 

四:已乱码数据处理

 

那由于插入数据时的会话字符集为latin,导致在client出现乱码的那些数据,要先删除再重新插入。

 

--后记,这个需要重启服务器,不知道有没有其他更好的办法。

欢迎大家拍砖指正。

 

 


你可能感兴趣的:(mysql查询中文出现乱码)