MySQL插入异常:SQL state [HY000]; error code [1366]-----(utf8mb4)

今日发现我的一个小爬虫软件,爬取数据不及时,查询服务器日志发现异常:

SQL state [HY000]; error code [1366]
java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\xAD</...'

显示为某字段插入异常;而显示该字段的值为上面显示的字符

经过查阅发现mysql编码问题

'\xF0\x9F\x98\xAD</...'

可以发现该字符为一个4字节的十六进制的字符

我们先看看mysql的字符集所支持的字节范围:

SHOW CHARACTER SET;

MySQL插入异常:SQL state [HY000]; error code [1366]-----(utf8mb4)

 

发现:

utf8最大支持3个字节的字符

翻看了mysql官方version release notes,可以发现:

在version 5.5.3之后,增加了一种和utf-8类似的字符集utf8mb4,并且它的编码支持4个字节每个字符,

所以解决办法是:

将对应列的字符集改成utf8mb4

再进行插入测试,发现插入成功;


 

结束

上一篇:Mysql存储表情等报错的解决方案


下一篇:MySql的CURRENT_TIMESTAMP