MySQL 插入中文乱码问题的解决
向 MySQL 插入带中文的数据,例如 insert into student values('张三','男','2015-11-12','Sales');,若出现乱码,先用 show variables like 'character%'; 查看当前相关字符集。
一、六处字符集
从上图可以看到 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 存储。快速设置:
设完后插入和显示都正常,但只对当前窗口有效。关掉 CMD 再开,乱码又回来。
三、改 my.ini 持久化
MySQL 安装目录下的 my.ini 可以一劳永逸。[mysql] 与客户端相关,[mysqld] 与服务器相关。默认类似:
把客户端默认编码 default-character-set=utf8 改成 default-character-set=gbk,再重启 MySQL 服务即可。这是针对 Windows CMD 客户端的做法;应用程序连接应在连接串或驱动里明确指定 UTF-8。
一句话总结:CMD 是 GBK、库是 UTF-8 就会乱码;set names gbk 管当前窗口,改 my.ini 的客户端字符集才能持久。
转载请注明来源:MySQL 插入中文乱码问题的解决








