现象:
mysql的默认编码设置为utf-8,页面以utf-8的编码方式写入到数据库。用工具查看一切正常,但从mysql的命令行读数据出来总是乱码。
原因:
mysql的客户端根本无法以utf-8的形式返回数据。windows下命令行的默认属性为GBK。
- mysql中关于字符集的种类有很多,对我们编程有影响的主要是客户端字符集(character_set_client)和数据库字符集(character_set_database)在写入时Mysq会将客户端指定的字符集转换成数据库字符集存入数据文件,读取时又将数据库字符集转换成客户端指定的字符集展示给客户端,把客户端字符集和数据库字符设置一致,显而易见的好处是免掉转换的性能损耗;另外,如果考虑到以后数据库的迁移,将数据库字符集设置为大多数数据库都支持的字符集会省掉很大麻烦。
- 我们对数据库的操作无非就是存取数据,在这一过程中,乱不乱码和数据库字符集好像没有什么关系。我们只要保证写入时选择的字符集和读取时选择的字符集一致,即只需保证两次操作的客户端字符集一致并且该字符集支持所存取的数据字符即可.
- MySQL命令行中文乱码
windows下命令行的默认属性为GBK。所以在命令行查询时将编码格式转换成gbk,在命令行插入时将编码格式转换为gbk(因为此时的client编码格式为gbk,因此需要将character_set_client设置为gbk时进行命令行插入),其余时间将编码格式转换成utf8,以此保证数据库的编码格式为utf8。
在MySQL命令行输入:show variables like ‘character%’;
查看当前配置的编码;
在MySQL命令行输入 :set names utf8;
则等同于
set character_set_client=utf8;
set character_set_results=utf8;
set character_set_connection=utf8;
这三条命令
在命令行插入数据之前
执行命令set names gbk;或者set names gb2312;
再插入
查询数据之前
执行命令set names gbk;或者set names gb2312;
完了之后再set names utf8;
这样就能正常插入和查询中文并且保持数据库编码为utf8