CentOS 7,MYSQL5.7 不能插入中文数据 ERROR 1366 (HY000): Incorrect string value: ‘\xE6\x9D\x8E\xE6\x98\x8E‘

问题描述:

系统版本为CentOS7.
表结构:
在这里插入图片描述
插入语句:

mysql> insert into xsjbxxb values("201820109105","李明","男","2001-5-8","2018201091","群众","白族","甘肃","01","电子科学与技术","2018","18",NULL);
ERROR 1366 (HY000): Incorrect string value: '\xE6\x9D\x8E\xE6\x98\x8E' for column 'xm' at row 1

从mysql的错误描述可以看出插入中文出错了,当是不支持中文数据插入。
查看数据库的状态:

mysql> status;

数据库状态:
在这里插入图片描述
latin1字符集为8bit,这说明它是不能表示中文的,修改字符集即可。

解决方法:

更改数据库字符集

通过mysql命令语句更改数据库字符集只是临时的,只能通过修改配置文件才能永久生效。
退出MySql

1.修改配置文件

输入:

vi /etc/my.cnf

进入配置文件,并按 i 进入编辑模式:
在这里插入图片描述

在这输入:

character_set_server=uf8

ESC键推出编辑并输入:wq保存文件并退出。

2.重启mysql服务

\q推出mysql输入:

systemctl start mysqld

重启mysql服务
更改数据库字符集之后可以删除之前创建的数据库,新创建,不然就要更改一大堆字符集设置。如下面所示:

更改数据表字符集

在更改数据库字符集之后插入中文数据还是出错。
输入查看建表语句:

show create table xsjbxxb;

在这里插入图片描述

数据表的字符集仍为Latin1。
输入:

alter table xsjbxxb default character set utf8;

再次插入中文测试数据仍然错误。
再次查看建表语句:
在这里插入图片描述

发现每列的字符集仍为Latin1。
更改每一列的字符集:

 alter table xm default character set utf8;

依次将每一列的字符集都改成utf8,即可插入中文数据了。


小结:

需要注意的是:通过更改数据库配置文件来更改字符集并不能连带更改以前创建的数据库和数据表的字符集,只能一个一个更改数据库,数据表,数据列的字符集。
如果不更改数据库的字符集,那以后再此数据库中创建的数据表的字符集仍是Latin1。


参考博客
https://blog.csdn.net/qq_37460847/article/details/103461910
https://www.jianshu.com/p/60aad5ffe399
https://www.cnblogs.com/HondaHsu/p/3640180.html
https://www.cnblogs.com/u-damowang1/p/14380848.html

猜你喜欢

转载自blog.csdn.net/GrowlR/article/details/120947448
今日推荐