昨天发现MySQL数据库执行发生了报错

ERROR 1366 (HY000): Incorrect string value: '\xF0\x9F\x87\xA8\xF0\x9F...'

马上意识到应该是字符编码不匹配的问题。经核实,是某个名字中含有表情,是个4个字节的utf8字符,utf8是可变长度的,根据字符的不同有1个字节、2个字节、3个字节和4个字节四种情况。

MySQL的utf8只支持3个字节的,4个字节的需要用utf8mb4。

查看具体的字段,发现已经是utf8mb4字符集的了,那么到底是在哪个环节出了问题呢?根据搜索,网上的有让mysql的my.ini配置的,有让改表字符集、字段字符集的,都对不上,因为我的表和字段都设置成utf8mb4了。

感谢https://blog.csdn.net/geilivablemental/article/details/45034229带来的灵感。

通过查询

mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

以上,我把character_set_client和character_set_connection设置为utf8mb4就可以了。

character_set_client和character_set_connection其中一个不为utf8mb4,都会导致表情符号变成乱码,但是不会报错,只有都是uft8mb4,才能完整支持。

经过一系列的尝试,发现字符集的控制只与character_set_client和character_set_connection和这个字段的字符集类型有关系

与表、数据库、数据库服务器的字符集以及配置没有关系(未细致排除是否受系统等非MySQL软件的影响,在CentOS Linux release 7.8.2003上测试)

通过修改客户端和链接的编码类型、字段的字符集类型,保持最大兼容(utf8mb4兼容utf8,utf8兼容latin1),便解决了这个问题。

至于如何修改客户端character_set_client和链接character_set_connection的编码类型,取决于各个客户端API,做法不一,一般创建链接的时候都可以指定encoding。

关于ERROR 1366 (HY000): Incorrect string value: '\xF0\x9F\x87\xA8\xF0\x9F...'报错的解决心得的更多相关文章

  1. mysql 插入中文时出现ERROR 1366 (HY000): Incorrect string value: '\xC0\xEE\xCB\xC4' for column 'usern ame' at row 1

    1 环境: MySQL Server 6.0  命令行工具 2 问题 :  插入中文字符数据出现如下错误: ERROR 1366 (HY000): Incorrect string value: '\ ...

  2. mysql insert中文乱码无法插入ERROR 1366 (HY000): Incorrect string value

    ERROR 1366 (HY000): Incorrect string value: '\xB1\xEA\xCC\xE2\xD5\xE2...' for column 'title' at row ...

  3. Linux MySQl 5.7.17 MySQL ERROR 1366(HY000):Incorrect string value 解决方法

    MySQL ERROR 1366(HY000):Incorrect string value,在往数据库中插入中文的时候会出现. 这也就是编码问题,网上大部分都是说设置下配置文件中的设置,而可悲的是在 ...

  4. Mysql插入中文时提示:ERROR 1366 (HY000): Incorrect string value: '\xE5\x8F\xB0\xE5\xBC\x8F...' fo

    Mysql插入数据时提示:ERROR 1366 (HY000): Incorrect string value: ‘\xE5\x8F\xB0\xE5\xBC\x8F…’ fo 分析如下: 首先通过语句 ...

  5. ERROR 1366 (HY000): Incorrect string value: '\xD6\xD0\xCE\xC4' for column XXX at row 1

    本错误为:该列的插入格式有误 修改该表中该列的字符集为utf-8 网上办法: )不能插入中文解决办法: 向表中插入中文然后有错误. mysql> insert into users values ...

  6. MySQL ERROR 1366(HY000) Incorrect string value

    有以下两张表: mysql> show tables; +---------------+ | Tables_in_old | +---------------+ | book | | pres ...

  7. ERROR 1366 (HY000): Incorrect string value: '\xE9\x83\x91\xE5\xB7\x9E' for column 'aa' at row 1 MySQL 字符集

    ERROR 1366 (HY000): Incorrect string value: '\xE9\x83\x91\xE5\xB7\x9E' for column 'aa' at row 1创建表之后 ...

  8. ERROR 1366 (HY000): Incorrect string value:MySQL数据库、表的字符集为GBK

    mysql> update userinfo set MEDIASOURCE = 'CS02-北京' where IMPORTNO = 'IMP201640613101206';ERROR 13 ...

  9. mysql DOS中中文乱码 ERROR 1366 (HY000): Incorrect string value: '\xC4\xEA\xBC\xB6' for column 'xxx' at row 1

    问题:ERROR (HY000): Incorrect string value: 在DOS中插入或查询中文出现乱码 登入mysql,输入命令:show variables like '%char%' ...

  10. ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'name' at row 1

    ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'name'  at row 1   数据库字符集问 ...

随机推荐

  1. 关于htpasswd

    什么是 htpasswd htpasswd是一个apache的内置工具,其生成的文件称之为htpasswd文件.htpasswd文件本身一个密码本,或者类似于数据库一样,用来存储一些密码(凭证)信息. ...

  2. 通过adb查看手机app的包名

    在进行App自动时,需要查看手机应用包名.Activity的信息,下面介绍一种简单的查看手机应用的信息: 1.启动手机的app 2.使用adb shell dumpsys window | finds ...

  3. C# 在GridView里面使用a标签下载文件(图片)

    不能使用ajax进行下载文件的操作,具体原因需百度 前端页面,在GridView里面使用模板列,模板列放a标签 <cimesui:cimesGridView ID="GridView1 ...

  4. RSS经典教程

    RSS经典教程 作者:OLD HELPSoldhelps@126.com RSS 指 Really Simple Syndication(真正简易联合) RSS 使您有能力聚合(syndicate)网 ...

  5. 三星电子的KNOX安全技术难以满足企业BYOD控管需求

    不可否认的是三星在智能手机领域里的辉煌战绩,三星最近推出了端到端的基于Android平台的解决方案KNOX,并且宣称可以提供从硬件到应用层的多重安全加固. KNOX是否能够延续其在企业领域里辉煌呢?相 ...

  6. liunx查看端口使用情况

    netstat -ntlp //查看当前所有tcp端口

  7. jmeter取样器之KafkaProducerSampler(往kafka插入数据)

    项目背景 性能测试场景中有一个业务场景的数据抽取策略是直接使用kafka队列,该场景需要准备的测试数据是kafka队列里的数据,故需要实现插入数据到kafka队列,且需要实现控制每分钟插入多少条数据. ...

  8. Oracle 存储过程2: PL/SQL数据类型

    一.标量数据类型 标量数据类型的变量只有一个值,且内部没有分量.标量数据类型包括数字型,字符型,日期型和布尔型.这些类型有的是 Oracle SQL 中有的数据类型,有的是 PL/SQL 自身附加的数 ...

  9. div css 页面中心弹窗窗口

    <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8&quo ...

  10. 在centons7系统部署一套单master的k8s集群

    架构图: 操作系统:CentOS Linux release 7.7.1908 (Core) docker:docker-ce-20.10.14-3.el7.x86_64 kubernetes: 1. ...