解决MySQL插入汉字报错的问题

解决MySQL插入汉字报错的问题

如图是我在做mybatis实验的时候创建的数据库表
解决MySQL插入汉字报错的问题
在插入数据的时候会报如下错误
Incorrect string value: ‘\xCD\xF5\xE8\xA1’ for column ‘s_name’ at row 1
解决MySQL插入汉字报错的问题
但是将汉字改为英文后就不会报错
解决MySQL插入汉字报错的问题
所以报错原因就是无法插入汉字,也就是MySQL的字符编码问题

解决过程

首先输入 alter table 表名 default character set utf8;
将表的编码格式改为utf8,但是发现问题还是没有解决
解决MySQL插入汉字报错的问题
输入show create table 表名;,看到s_name和s_sex的编码格式是DEFAULT NULL,也就是说表的编码格式改为了utf8,但是你要插入汉字的这两列的编码格式还没有改过来,所以依然会报错
解决MySQL插入汉字报错的问题
通过
alter table 表名 change 列名 列名 列类型 character set utf8;
把列的编码方式也改为utf8,如图
解决MySQL插入汉字报错的问题
这个时候在向数据库表中插入数据,就不会报错了
解决MySQL插入汉字报错的问题
现在可以看到这两列的编码方式都改成了utf8
解决MySQL插入汉字报错的问题

误区

一开始输入 show variables like ‘%character_set%’;查看MySQL的字符编码
解决MySQL插入汉字报错的问题
以为是数据库编码的问题
然后把character_set_database的latin改成了utf8
发现并不行
所以不是数据库编码问题,而是表的编码方式和列的编码方式的问题


MySQL字符集相关参数:
character_set_server : 服务器字符集
collation_server : 服务器校对规则

character_set_database : 默认数据库的字符集
collation_database : 默认数据库的校对规则

character_set_client:服务器使用该变量取得链接中客户端的字符集

character_set_connection:服务器将客户端的query从character_set_client转换到该变量指定的字符集。
character_set_results:服务器发送结果集或返回错误信息到客户端之前应该转换为该变量指定的字符集

更改字符集参数可参考链接