今天将爬虫数据添加到数据库时出现了这个错误:
java.sql.SQLException: Incorrect string value: '\xF0\x9F\x90\x82' for column 'spda_content' at row 1
错误原因是因为:mysql中utf8字符最大字节为3字节,但是某些unicode字符转成utf8编码之后有4个字节,所以需要将现有表改为utf8mb4编码。
首先需要修改my.ini文件
在相应地方添加如下代码:
[client]
default-character-set=utf8mb4
port=3306
[mysql]
default-character-set=utf8mb4
[mysqld]
port=3306
character-set-client-handshake = FALSE
character-set-server=utf8mb4
#collation-server = utf8mb4_unicode_ci //如果改这个tomcat会连不上数据库,不知道为什么,只能注释了。
init_connect='SET NAMES utf8mb4'//如果不在此设置,就需要在代码中连接数据库时加上了。
在将mysql中从库到表都编码改为utf8mb4,需要mysql5.5以上才支持utf8mb4,具体操作就不多说了,可以手打命令,也可以通过像类似mysql-front这样的工具。
最后要改的就是本地程序,首先需要把jdbc驱动包换成最新的,至少要5.1.x;
然后需要连接数据库路径改为如下:
jdbc:mysql://localhost:3306/spider?characterEncoding=utf8
必须要加上characterEncoding=utf8,这样插入查询数据库时会自动的转为utf8mb4,否则还会是乱码
其他的就不用变了,utf8mb4向下兼容utf8,只是能表示更多的字节。