MySQL utf8转utf8mb4(java.sql.SQLException: Incorrect string value...)

今天将爬虫数据添加到数据库时出现了这个错误:

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,只是能表示更多的字节。

你可能感兴趣的:(mysql)