MySQL 插入中文乱码问题的解决

    |     2015年6月1日   |   数据库   |     0 条评论   |    1697

向 MySQL 插入带中文的数据,例如 insert into student values('张三','男','2015-11-12','Sales');,若出现乱码,先用 show variables like 'character%'; 查看当前相关字符集。

aaa

一、六处字符集

从上图可以看到 MySQL 有六处使用了字符集:client、connection、database、results、server、system。其中 database、server、system 偏服务器端(system 无法修改,就是 utf-8);connection、client、results 与客户端相关。

变量 含义
client 客户端使用的字符集
connection 连接数据库时的字符集;程序未指明则跟服务器默认
database 某个库的字符集;建库未指明则用安装时指定的
results 返回给客户端时使用的字符集
server 服务器安装时指定的默认字符集
system 数据库系统自身使用的字符集

二、乱码原因与临时修复

问题出在当前 CMD 窗口:客户端输入采用 GBK,数据库是 UTF-8,编码不一致就会乱码。CMD 编码不好改,只能改 connection、client、results,告诉服务器「当前插入的是 GBK」。服务器库虽然是 UTF-8,但能识别通知过来的 GBK 并自动转成 UTF-8 存储。快速设置:

set names gbk;

设完后插入和显示都正常,但只对当前窗口有效。关掉 CMD 再开,乱码又回来。

三、改 my.ini 持久化

MySQL 安装目录下的 my.ini 可以一劳永逸。[mysql] 与客户端相关,[mysqld] 与服务器相关。默认类似:

[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8

把客户端默认编码 default-character-set=utf8 改成 default-character-set=gbk,再重启 MySQL 服务即可。这是针对 Windows CMD 客户端的做法;应用程序连接应在连接串或驱动里明确指定 UTF-8。

一句话总结:CMD 是 GBK、库是 UTF-8 就会乱码;set names gbk 管当前窗口,改 my.ini 的客户端字符集才能持久。

转载请注明来源:MySQL 插入中文乱码问题的解决
本文链接地址:https://ai.zhousir.top/?p=728

上一篇:

下一篇:

回复 取消