mysql乱码问题
出现乱码的原因:因为当前的CMD客户端窗口与数据库本身及库,表的编码格式不一致导致的。所以当出现乱码的时候,请排查:
* sql文件的编码格式
* 当前CMD客户端窗口的编码格式
* 数据库服务本身的编码格式
* 数据库的编码格式
* 表结构的编码格式
我一在次更新客户环境中出现了,mysql命令source文件后,出现乱码的情况。但是使用navicat执行sql确没有问题。
这是命令行中查看字符编码得到结果:
这是我使用navicat查看字符编码得到的结果:
从上图中可以看到MYSQL有六处使用了字符集,分别为:
与服务器端相关:database、server、system(永远无法修改,就是utf-8);
database | 为数据库服务器中某个库使用的字符集设定,如果建库时没有指明,将使用服务器安装时指定的字符集设置 |
server | 为服务器安装时指定的默认字符集设定 |
system | 为数据库系统使用的字符集设定 |
与客户端相关:connection、client、results :
client | 为客户端使用的字符集 |
connection | 为连接数据库的字符集调协类型,如果程序没有指明连接数据库使用的字符集类型则按照服务器端默认的字符集设置 |
results | 为数据库给客户端返回时使用的字符集设定,如果没有指明,使用服务器默认的字符集。 |
通过上图和解释,可以得出,只要客户端与服务端的编码格式不一致就会导致筹码问题。只不过我这里只是这个问题,还有如表,数据库,sql文件的字符编码不一致,都会导致乱码。
解决方法
一、 在当前的CMD中修改字符集,只不过只能在当前会话生效:
mysql > set names utf8;
二、在连接数据库时就定义字符集编码:
~]# mysql -uxxx -pxxx -hxxxx --default-character-set=utf8
三、最有效的办法,就是在mysql服务器端修改mysql的配置文件,加入如下配置:
~]# cat /etc/my.cnf
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8