mysql报错ERROR 1366(HY000)

环境

         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字符集

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值