前言:从控制台,向mysql数据库的表格中通过下列的命令添加中文内容时,出现了编码的问题:
insert into 数据库名称 (字段) values (值);
笔者的编码格式均为utf-8.
控制台提示了一个错误,错误内容为\uXXXX,其中XXXX为十六进制。这个为unicode的转义字符。
分析:
mysql的内部字符集涉及到了五处地方。分别为
client:客户端告知使用的字符集。
connection:连接数据库使用的字符集。没有指定的话,默认使用服务器字符集。
database :数据库使用的字符集,没有指定的话,默认使用服务器的字符集。
result :是数据库返还给客户端使用的字符集,没有指定的话,使用服务器字符集。
server :服务器安装时指定的字符集设置。
System:是数据库系统使用的字符集。
向控制台,输入:show variables like ('character_set%');出现如下结果:
结果验证了,Mysql的字符集。共有五处。
笔者经过分析,问题出现在client字符集,与result字符集的问题上,
因为这两者直接关系了,发送数据的编码格式与接受数据的编码格式。
尝试修改client字符集:向控制台输入以下代码:
set character_set_client=gbk; (改变客户端的字符集)
出现了下述的结果:
数据能顺利插入数据库,但返回的结果,出现了乱码。
乱码出现的原因:由于服务器返回的数据编码格式为utf-8的编码格式。
而客户端级cmd窗口采用的是gbk的编码进行解析。解析不正确,导致了乱码。
经过把results的字符集改变为gbk之后,即:set character_set_results=gbk;
结果正确显示了,中文字符。
过程图如下。
总结;cmd窗口只是一个客户端的应用程序。采用的编码,和解码方式直接决定了,向目标发送的数据的编码格式。
接受数据的解码格式。网上也有很多对cmd窗口编码格式的一个更改。笔者就不再这里进行阐述了。
ps:对cmd窗口改为utf-8格式的编码格式时,无法输入中文。