今日发现我的一个小爬虫软件,爬取数据不及时,查询服务器日志发现异常:
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;
发现:
utf8最大支持3个字节的字符
翻看了mysql官方version release notes,可以发现:
在version 5.5.3之后,增加了一种和utf-8类似的字符集utf8mb4,并且它的编码支持4个字节每个字符,
所以解决办法是:
将对应列的字符集改成utf8mb4
再进行插入测试,发现插入成功;
结束