问题描述:从新浪微博抓取消息保存到MySQL数据中,对应数据库字段为varchar,字符编码utf-8。部分插入成功,部分插入失败,报错如标题。
在网上查询,有人说是编码问题,建议修改编码格式,比如改成gbk,UTF-8,blob等等,但是几乎没有人给出更详细的答案。在一个英文网站上,才发现真正错误的原因。链接1链接2
错误原因:我们可以看到错误提示中的字符0xF0 0x9F 0x98 0x84 ,这对应UTF-8编码格式中的4字节编码(UTF-8编码规范)。正常的汉字一般不会超过3个字节,为什么为出现4个字节呢?实际上是它对应的是智能手机输入法中的表情。那为什么会报错呢?因为mysql中的utf-8并不是真正意义上的utf-8,它只能存储1~3个字节长度的utf-8编码,如果想存储4个字节的必须用utf8mb4类型。不而要使用utf8mb4类型,首先要保证Mysql版本要不低于MySQL
5.5.3。
解决方案:
1)使用utf8mb4数据类型
要用这种策略,如果MySql版本低于5.5.3,首先要进行版本升级,然后将对应的数据类型改为utf8mb4类型。如果使用的是Connector/J 连接数据库,需要在配置中把编码格式改为utf8mb4(set
character_set_server=utf8mb4 in the connection config)。
2)自定义过滤规则,将文本中出现的四字节UTF-8字符过滤或转化为自定义类型。
下面是将4字节字符转化为0000的测试例子。
for (int i = 0; i < b_text.length; i++)
{
if((b_text[i] & 0xF8)== 0xF0){
for (int j = 0; j < 4; j++) {
b_text[i+j]=0x30;
}
i+=3;
}
}
分享到:
相关推荐
本文主要介绍了关于MySQL存储表情报错:java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x92\xA9\x0D\x0A…’的相关解决方法,分享出供大家参考学习,下面话不多说了,来一起看看详细的介绍: ...
主要给大家介绍了关于MySQL存储表情时报错:java.sql.SQLException: Incorrect string value: 'xF0x9Fx92xA9x0Dx0A...'的解决方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x8C\xB7' for column 'nickname' at row 1 解决方案 修改nickname的编码格式,没必要修改整个表。这种方式也不需要重启数据库,修改完即生效 ...
从新浪微博抓到的数据在入库的时候抛出异常: Incorrect string value: ‘\xF0\x90\x8D\x83\xF0\x90…’ 发现导致异常的字符不是繁体而是某种佛经文字。。。额滴神。。。但是按道理UTF-8应该能支持才对啊,他不是...
最近,业务方反馈有个别用户信息插入失败,报错提示类似”Incorrect string value:”\xF0\xA5 ….. ” 看这个提示应该是字符集不支持某个生僻字造成的。 下面是在虚拟机里复现的场景: step1、模拟原始表结构字符集...
使用命令行进入Mysql: 输入命令"status"查看mysql的有关编码设置: 这里一共显示了4中字符集,Server characterset是数据库服务器的编码,DB characterset是数据库的编码,client characterset是客户端的编码,...
报错原因: windows 安装MySQL 时选择的是默认编码,创建数据库也选择默认编码,导致该库的编码默认为gbk.该库下的表默认也会是gbk,字段默认也是gbk. 解决方法: 第一种方法是windows在安装MySQL的bin目录下my.ini...
能使用中文进行搜索,但是insert into 中文是可以的。我的数据库和数据表中所有的charset都是设置的utf8。
主要给大家介绍了关于mysql中插入emoji表情失败的原因与解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Java开发,DB为Mysql,版本不详,编码用的是UTF-8,存入Emoji表情时报错如下: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x93' for column 'strValueContent' at row 1 解决方案:
sql.SQLException: Incorrect string value: ‘\xF0\x9F\x98\x97\xF0\x9F…’ for column ‘CONTENT’ at row 1 原因分析 MYSQL 5.5 之前, utf8 编码只支持1~3个字节,即BMP这部分的unicode编码区(基本就是0000~...
ipone5s中昵称输入“emoji 表情”,保存数据库有问题。 Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x8E\x80\xE5\xA4...' for column 'nickname' at row 1
1366 – Incorrect string value: ‘\xF0\x9F\x98\x81’ for column ‘job’ at row 23 解决办法: 1、修改配置文件my.ini【D:\Program Files\MySQL\MySQL Server 5.5】: [mysql] default-character-set=utf8mb4 ...
本文实例分析了mysql存储emoji表情报错的处理方法。...java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x92\x94’ for column ‘name’ at row 1 at com.mysql.jdbc.SQLError.createSQLException(SQL
Incorrect string value: '\xF0\x9F\x98\x89' for column 'sms_msg' at row 1 原因可能是您必须启用4字节支持。 这是一个指南: : :red_question_mark: 解决MySQL上的InnoDB'索引列大小太大'错误 如果您使用的是...
Caused by: java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x94\xA5’ for column Emoji表情存储到Mysql中时报错。 ios的表情(emoji表情),这种表情虽然是utf8编码,但是一个字符需要占用4个字节,而...