为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

一只萌萌小番薯 2019-07-08 17:24:58
当试图通过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。有什么问题吗?
查看完整描述

3 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

MySQL的utf8只允许在UTF-8中用3个字节表示Unicode字符.这里有一个需要4个字节的字符:\xF0\x90\x8D\x83(U+10343哥特字母SAUIL).

如果您有MySQL5.5或更高版本,则可以将列编码更改为utf8utf8mb4..这种编码允许在UTF-8中存储占用4个字节的字符.

您还可能必须设置server属性。character_set_serverutf8mb4在MySQL配置文件中。看来连接器/j默认为3字节Unicode,否则为:

例如,若要在Connector/J中使用4字节UTF-8字符集,请将MySQL服务器配置为character_set_server=utf8mb4,然后离开characterEncoding从连接器/J连接字符串中退出。连接器/J将自动检测UTF-8设置。


查看完整回答
反对 回复 2019-07-08
?
精慕HU

TA贡献1845条经验 获得超8个赞

包含\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)


查看完整回答
反对 回复 2019-07-08
  • 3 回答
  • 0 关注
  • 743 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信