14、MySQL 教程 - MySQL 插入中文数据报错的原因和解决办法

有时候,我们用中文系统连接mysql数据库时候,插入或者更新的数据是中文的时候,可能会出现报错,这篇就来分析下为什么有这个报错。

我们来新增一个中文数据,结果遇到了报错。

 

问题分析

报错提示:不正确的字符值

原因:

上面报错的\xDD\xFE这六个是十六进制的表示,我们知道计算机只识别二进制的数据,但是人类能识别很多符号,所以我们需要把符号都想办法给转换成二进制。不同国家的文字符号都可能不同,最早是美国的ASSIC的字符编码,只包含128个字符。后来出现了GBK,GB18030和UTF8等各种字符集。GBK默认是一个汉字用两个字节来存储,而UTF8默认是一个字符用三个字节来存储。Mysql服务器端默认字符集是UTF8,会把三个十六进制的字符当做一个汉字读取,所以才有这种错误出现。

如何查看系统默认的编码格式

 

如果你是安装的中文的系统,那么你默认的字符集是GBK,在cmd窗口,点击左上角那个菜单,然后点击属性,就可以看到如下图,显示字符集是GBK。

那么如何查看mysql服务器的到底识别哪些字符集。

 

一共支持39中字符集,上面截图ascii,gb2312和uft8我们应该知道或者听说过。

知道了mysql服务器支持39中字符集,那么默认的字符集是什么,通过以下命令查看。

 

排在第一位就是utf8字符集,这个就是为什么我们文章开头那个报错,我们本地是采用GBK字符集,但是mysql默认用utf8去解析字符,当然会解析失败。

如何解决插入中文报错或者警告的问题

 

然后插入中文数据之后,查询表发现还是有乱码,如何办呢?

 

这里报乱码的原因是因为数据来源服务器,服务器还是采用utf8的字符集,而我们客户端还是GBK,也就是客户端只能识别GBK,解决方案:修改服务器给客户端的字符集为GBK。

 

到这里,如果你查询发现数据显示正常没有乱码,那么是不是就完了呢?这种设置方式只能当前会话生效,下次打开连接mysql还是会显示乱码,那么怎么办呢,有没有一劳永逸的办法呢?利用一个快捷方式:set names gbk;

 

关于中文报错和乱码分析就到这里,需要掌握set names gbk;这个语句。