MySQL - ERROR 1366 (HY000): Incorrect string value: '\xE5\xA7\x9A\xE5\xAE\x87' for column xx

今天想创建两个简单的表,学习下union 和 union all的使用和区别,谁知在对只有两个字段,一个id,一个name的表插入数据的时候,却出现了如下错误:

ERROR 1366 (HY000): Incorrect string value: '\xE5\xA7\x9A\xE5\xAE\x87' for column 'name' at row 1

从错误信息中,大概知道应是编码的问题,但是具体是什么问题呢?如何导致的呢?

从网上资料了解到,MySQL数据库每次重新开启就会将字符串编码改为默认latin1(拉丁文),所以会导致操作中涉及中文字符会报错。

那么,碰到了这种问题该如何解决呢?

首先,登录mysql后,通过命令: show variables like '%char%'; 查看下数据库的编码:

charcater相关变量

从上图中看到character_set_database和character_set_server两个变量的值是latin1,即拉丁文。

这就会导致我们操作中文字符的时候出现编码错误。

方式一:在创建数据库之前修改character_set_database和character_set_server两个变量的值

分别敲入命令:

set chartacter_set_database = 'utf8';

set character_set_server = 'utf8';

修改全局变量

然后再次查看character相关变量的值,敲入命令:show variables like '%char%';  :

修改成功

从上图看到character_set_database和character_set_server两个变量的值已改为utf8。

然后就可以创建数据库和数据表了,再无编码错误之忧:

创建库、表、插入数据很顺利

如果你已经创建好了数据库和数据表,在往表中插入中文字符数据的时候碰到这个问题,且不想删除表和库,该如何解决呢?下面教给你方法。(我就是这个时候碰到的ERROR 1366......)

方式二、依次修改数据库、数据表、表中varchar类型字段的编码

首先查看下数据库和数据表的编码,敲入命令:

show create database isTester;     # isTester是你已经创建的数据库名

show create table t1;    # t1是你在数据库isTester中创建的数据表名

查看库、表的编码

从上图看到你已创建的数据库和数据表的编码都是latin1。

先修改数据库isTester的编码,敲入命令:alter database isTester character set 'utf8';    :

修改库编码

然后查看是否修改成功,敲入命令:show create database isTester;  :

查看库编码

接着修改数据表t1的编码,敲入命令:alter table t1 character set 'utf8';    :

修改表编码

然后查看是否修改成功,敲入命令:show create table t1;     :

查看表编码

从上图看到数据表t1的编码已改为utf8,但是name字段的编码仍是latin1,尝试插入数据还是报错,如下:

此时插入数据还是失败

所以还需要单独对name字段设置编码,敲入命令:alter table t1 change name name varchar(20) character set 'utf8';   :

修改字段的编码

查看是否修改成功,敲入命令:show create table t1;   :

修改成功

如上字段name的编码已经修改,和表t1的编码一致了。

再次插入数据就可以了:

插入数据成功

至此,ERROR 1366 (HY000): Incorrect string value: '\xE5\xA7\x9A\xE5\xAE\x87' for column ‘xx’ 编码问题解决。

参考资料:https://blog.csdn.net/weixin_44767769/article/details/90514605

你可能感兴趣的:(MySQL - ERROR 1366 (HY000): Incorrect string value: '\xE5\xA7\x9A\xE5\xAE\x87' for column xx)