mysql报错ERROR 1366(HY000)

  • Post author:
  • Post category:mysql



环境

mysql5.7 + CentOS release 6.5 (Final)


操作

执行 source /data/sql/one_player_data.sql


现象

1、执行source XXX.sql命令后会报错,错误如下:

ERROR 1366 (HY000) at line 1 in file: ‘/data/sql/one_player_data.sql’: Incorrect string value: ‘\xF0\x9F\x97\xBF’ for column ‘des’ at row 1

2、通过本地 navicat 单独执行sql语句不会报错。


分析

1、通过 file -i 确认过sql文件的编码格式为: utf-8

2、通过进入mysql后台( mysql -u root -p ), 进入后执行 SHOW VARIABLES LIKE ‘character%’;

3、同时查看成功案例,navicat中设置的表结构参数

4、再结合数据源本身为Emoji表情可知,字段转储失败的原因为特殊字符的字节数有差异。Mysql的utf8编码最多是3个字节,而Emoji表情或特殊字节是4个字节,所以会出现插入失败的情况,同时提示 Incorrect string value


针对 utf8mb4


进行说明

Mysql5.5.3版本之后新增了utf8mb4编码,mb4 = most bytes,其就是专门用来兼容四个字节的unicode,utf8mb4就是utf8的超集。


结论:

1、通过查看表结构编码,以及直接insert语句的正确性可知,表结构无问题;

2、通过file -i查看sql文件编码格式(utf-8),sql文件无问题;

3、通过查看mysql字符集配置及数据源本身为emoji表情,可以定位为字符集配置问题;


解决方案:


去往mysql服务器上 修改对应mysql的配置参数

a)    进入mysql安装目录,vim对应配置文件(myini 或my.cnf)

b)    添加或修改对应配置

character_set_server=utf8mb4

collation-server = utf8mb4_unicode_ci

[client]

default-character-set = utf8mb4

[mysql]

default-character-set = utf8mb4

c)    配置修改完成后,重启mysql,并再次查看mysql字符集



版权声明:本文为woshiyuxie原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。