猿问

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

当试图通过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开头)时,我总是会得到这个错误。

列的排序规则是UTF 8_General_ci。

有什么问题吗?


一只萌萌小番薯
浏览 744回答 3
3回答

皈依舞

MySQL的utf8只允许在UTF-8中用3个字节表示Unicode字符.这里有一个需要4个字节的字符:\xF0\x90\x8D\x83(U+10343哥特字母SAUIL).如果您有MySQL5.5或更高版本,则可以将列编码更改为utf8到utf8mb4..这种编码允许在UTF-8中存储占用4个字节的字符.您还可能必须设置server属性。character_set_server到utf8mb4在MySQL配置文件中。看来连接器/j默认为3字节Unicode,否则为:例如,若要在Connector/J中使用4字节UTF-8字符集,请将MySQL服务器配置为character_set_server=utf8mb4,然后离开characterEncoding从连接器/J连接字符串中退出。连接器/J将自动检测UTF-8设置。

精慕HU

包含\xF0很简单编码为多字节的字符使用UTF-8。尽管您的排序规则设置为UTF 8_General_ci,但我怀疑数据库、表或甚至列的字符编码可能有所不同。他们是独立设置..试着:ALTER TABLE database.table MODIFY COLUMN col VARCHAR(255)       CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;用任何实际数据类型替换VARCHAR(255)
随时随地看视频慕课网APP
我要回答