MySQL: Incorrect string value: '\xF0\xA4\xBD\x82'分析解决
一、问题由来
今天应用报错:
### Error updating database. Cause: java.sql.SQLException: Incorrect string value:'\xF0\xA4\x9E\x8F",...' for column 'message_content' at row 1
二、初次分析
我们可以看到xF0xA4x9Ex8F是4字节很可能就是utf8mb4中某些生僻字的编码。我们将表更改为utf8mb4后还是报错。所以第一步一定要将字段或者表修改为utf8mb4如下语句
alter table test101 convert to character set utf8mb4;
or
alter table test101 change `name` `name` varchar(20) CHARSET utf8mb4 DEFAULT NULL ;
注意:这个语句是copy算法会受到MDL LOCK的影响完全堵塞,不是online ddl如下:
mysql> alter table test204 algorithm=inplace, change `name` `name`
varchar(20) CHARSET utf8 DEFAULT NULL ;
ERROR 1846 (0A000): ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY.
三、详细分析
随后当然报错还在继续,然后我简单描述一下我的分析的过程。具体知识见如下文章:
关于ORACLE和MYSQL中文字符乱码的根源剖析]
http://blog.itpub.net/7728585/viewspace-2086271/
我们当前环境为:
- 客户端入库字符集 utf8mb4
- 转换字符集 utf8
- 存储端字符集utf8mb4
对于这种情况的设置,对已某些生僻字比如:
insert into test204 values('?');
(?)的其utf8mb4编码为:
就需要将四字节的0Xf0a4bd82编码转换为utf8显然是不可能的。因为utf8根本不认识而且还是三个字节所以报错如下:
[SQL]
insert into test204 values('?');
[Err] 1366 - Incorrect string value: '\xF0\xA4\xBD\x82' for column 'name' at row 1
为此实际上我们只需要做一个操作就是不做转换及
set names utf8mb4;
这样环境如下:
- 客户端入库字符集 utf8mb4
- 转换字符集 utf8mb4
- 存储端字符集utf8mb4
insert into test204 values('?');
[SQL]
insert into test204 values('?');
受影响的行: 1
时间: 0.218s
插入成功。我们读取数据文件二进制进行底层验证取到的数据如下:
红色部分为('?')这个字的十六进制编码。没有问题数据入库完成。
作者微信:
MySQL: Incorrect string value: '\xF0\xA4\xBD\x82'分析解决相关推荐
- 【Mysql】存储emoji表情报错(Incorrect string value: ‘\xF0\x9F\x98\x82\xF0\x9F...‘)的解决方案
[Mysql]存储emoji表情报错(Incorrect string value: '\xF0\x9F\x98\x82\xF0\x9F...')的解决方案 参考文章: (1)[Mysql]存储emo ...
- mysql导数据出现Incorrect string value: '\xF0\x9F\x90\x82'报错
问题描述:利用mysql的load data infile into 命令导数据,导到198780行就自动回滚rollback,返回 Incorrect string value: '\xF0\x9 ...
- 解决 java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x82\xF0\x9F...'
java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x82\xF0\x9F-' 问题: 因为表情符号存入Mysql数据库字符串不兼 ...
- 【MySQL】存储emoji表情报错(Incorrect string value: '\xF0\x9F\x98\x82\xF0\x9F...')的解决方案...
Emoji表情字符现在在APP已经广泛支持了.但是MySQL的UTF8编码对Emoji字符的支持却不是那么好.所以我们经常会遇到这样的异常: Java.sql.SQLException: Incorr ...
- mysql xf0x9fx8ex88_【MySQL】存储emoji表情报错(Incorrect string value: '\xF0\x9F\x98\x82\xF0\x9F...')的解决方案...
Emoji表情字符现在在APP已经广泛支持了.但是MySQL的UTF8编码对Emoji字符的支持却不是那么好.所以我们经常会遇到这样的异常: Java.sql.SQLException: Incorr ...
- Incorrect string value: '\xF0\x9F\x98\x82' for column '' at row 1
1.一般来说Mysql(小于5.5.3)字符集设置为utf8,指定连接的字符集也为utf8,django中save unicode string是木有问题的.但是,当字符串中有特殊字符(如emoji表 ...
- MySQL : Incorrect string value: '\xE5\x9B\xBD\xE5\xBA\x86' for column 'stu_name' at row 1
Reffered:http://info.michael-simons.eu/2013/01/21/java-mysql-and-multi-byte-utf-8-support/ 修改表的编码为ut ...
- mysql存储移动端emoji表情 报错Incorrect string value: '\xF0\x9F\x98\x82'
原因:mysql utf8存储2-3个字节 移动端的emoji表情为4个字节 方法: 1.修改my.cnf 文件 加入 [client] default-character-set = utf8mb4 ...
- (MySQL)Incorrect string value: '\xF0\x9F\x98\x82\xF0\x9F...' for column 'readerName' at row 1
在向数据库存入表情的时候,出现这样的错误,网上搜了一下,各种命令,改配置,后来对比一下,发现这么改也是一样的.送上解决办法,但是不保证全部适用.出现这样的问题是因为,普通的字符串或者表情都是占位3个字 ...
最新文章
- 马云自嘲只会用电脑收发邮件,网友:马老师的话,听听就行了
- 祈澈菇凉的高端知识资源分享星球开通
- CentOS7 扩容 / 目录
- profile 文件含义
- shell脚本获取客户端IP
- asp.net中此页的状态信息无效,可能已损坏的解决之道
- 牛客小白月赛12 I	华华和月月逛公园 (tarjian 求桥)
- mysql cluster 查看数据库表名称_MySQL Cluster如何创建磁盘表方法解读
- Altium Designer20原理图库放置引脚报错解决方案
- 转载 敏捷教练,从A到Z
- hdu 2184 01背包变形
- 1208. 尽可能使字符串相等
- 磁盘分区和目录的区别是什么
- hashmap允许null键和值吗_【29期】Java集合框架 10 连问,你有被问过吗?
- 苹果id解锁平台_黄蜂2单手手柄体验:苹果安卓平台双通用,解锁新潮玩法!
- 阿里菜鸟java后台开发电话面试
- 回头再说012 盘点我的2008年
- 疫情影响下普惠金融风险与对策
- 接口测试[PostMan]
- python爬虫豆瓣评论论文_Python爬虫(三)——对豆瓣图书各模块评论数与评分图形化分析...