尝试通过 JDBC 将 UTF-8 插入 MySQL 时出现“乱码”
这是我的连接设置方式:
Connection conn = DriverManager.getConnection(url + dbName + "?useUnicode=true&characterEncoding=utf-8", userName, password);
并且在尝试向表中添加行时出现以下错误:
Incorrect string value: '\xF0\x90\x8D\x83\xF0\x90...' for column 'content' at row 1
我正在插入数千条记录,当文本包含 \xF0 时,我总是收到此错误(即错误的字符串值总是以 \xF0 开头)。
该列的排序规则是 utf8_general_ci。
可能是什么问题呢?
回答

解决方法
遇到同样的问题,保存数据utf8mb4需要确保:
character_set_client, character_set_connection, character_set_results是utf8mb4:
character_set_client和character_set_connection指示字符集,其中的语句由客户端发送,
character_set_results指示字符集的服务器查询结果返回给客户端。
请参阅字符集链接
表和列编码是 utf8mb4
对于JDBC,有两种解决方案:
方案一(需要重启mysql):
- 修改my.cnf如下并重新启动MySQL:
[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci //这个可能会没有,那就添加进去
/*
这可以确保数据库character_set_client, character_set_connection, character_set_results是utf8mb4在默认情况下。
*/


-
重启MySQL
-
将你原先的表和列编码更改为 utf8mb4
方案二(不需要重启mysql):
-
将表和列编码更改为 utf8mb4
-
characterEncoding=UTF-8在 jdbc 连接器中指定,因为 jdbc 连接器不支持utf8mb4.
-
像这样写你的sql语句(需要添加allowMultiQueries=true到jdbc连接器):
'SET NAMES utf8mb4;INSERT INTO Mytable ...';
这将确保与服务器的每个连接character_set_client,character_set_connection,character_set_results都是utf8mb4.

浙公网安备 33010602011771号