当尝试通过JDBC将UTF-8插入MySQL时出现“不正确的字符串值”?

10 浏览
0 Comments

当尝试通过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。

问题可能是什么?

admin 更改状态以发布 2023年5月24日
0
0 Comments

包含\xF0的字符串只是使用UTF-8编码的多个字节的字符。

虽然您的排序规则设置为 utf8_general_ci,但我怀疑数据库、表甚至列的字符编码可能会不同。它们是独立的设置。尝试:

ALTER TABLE database.table MODIFY COLUMN col VARCHAR(255)  
    CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;

将VARCHAR(255)替换为您实际的数据类型。

0
0 Comments

MySQL的utf8只支持可以用UTF-8表示为3个字节的Unicode字符。这里有一个需要4个字节的字符:\xF0\x90\x8D\x83(U+10343 GOTHIC LETTER SAUIL)。

如果您使用的是MySQL 5.5或更高版本,则可以将列编码从utf8更改为utf8mb4。此编码允许存储占用UTF-8中的4个字节的字符。

您还可能需要在MySQL配置文件中设置服务器属性character_set_serverutf8mb4。似乎否则,Connector/J默认为3字节的Unicode

例如,要在Connector/J中使用4字节UTF-8字符集,请配置MySQL服务器为character_set_server=utf8mb4,并在Connector/J连接字符串中省略characterEncoding。 Connector/J将自动检测UTF-8设置。

0