当前位置: 首页 > 知识库问答 >
问题:

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

施茂
2023-03-14

我的连接是这样设置的:
连接conn=drivermanager.getConnection(url+dbName+“?useunicode=true&characterencoding=utf-8”,userName,password);

当tyring向表中添加一行时,我会遇到以下错误:
不正确的字符串值:'\xf0\x90\x8d\x83\xf0\x90...'对于第1行的列“content”

我正在插入数以千计的记录,当文本包含\xf0(即不正确的字符串值总是以\xf0开头)时,我总是得到这个错误。

列的排序规则是UTF8_GENERAL_CI。

共有1个答案

牟慎之
2023-03-14

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

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

您可能还必须在MySQL配置文件中将服务器属性character_set_server设置为UTF8MB4。Connector/j似乎默认为3字节Unicode,否则:

例如,若要在连接器/j中使用4字节UTF-8字符集,请使用character_set_server=utf8mb4配置MySQL服务器,并将characterencoding排除在连接器/j连接字符串之外。连接器/j将自动检测UTF-8设置。

 类似资料:
  • 问题内容: 这是我的连接设置方式: 尝试在表中添加行时出现以下错误: 我要插入数千条记录,并且当文本包含\ xF0时,总是会出现此错误(即,不正确的字符串值始终以\ xF0开头)。 该列的排序规则是utf8_general_ci。 可能是什么问题呢? 问题答案: MySQL的许可仅允许使用UTF-8中的3个字节表示的Unicode字符。在这里,您需要一个需要4个字节的字符:\ xF0 \ x90

  • 我需要添加用户名从Facebook到数据库,这些名称有UTF-8字符,如 (ą,č,ę,ė,į,š,ų,ū).当我把它添加到数据库中,例如字母看起来像

  • 我有一些代码如下所示。 该项目的标准字符集是“UTF-8”。并且所有消息都很好地打印为UTF-8。我猜把UTF-8字符串放入java.lang.Object是压垮UTF-8的原因。 我该怎么解决这个? 我已经试过了: =在上块中= =配置= 将消息转换器添加到root-context.xml中,如下所示。 ===*条件=== 感谢阅读和分享我的问题:D

  • 问题内容: 我在AngularJS上建立的SPA中有一个文本输入框,供用户向打印输出中添加标题。输入框的声明如下: 文本框中填充了服务器提供的默认标题。用户可以将标题更改为适合他们的名称。更改标题后,服务器将更新并在响应的标题中发送回新标题,然后替换框中的标题。这非常适合标准ASCII类型的字符。 但是,对于unicode字符(例如àßéçøö),它不起作用。文本已正确发送,在服务器上正确更新并正

  • 问题内容: 好的,所以我一直在研究Steam Web API,我将其中一个值存储在名为的变量中。当我使用此代码片段将其插入到mysql数据库中时,它会插入一个与存储在变量中不同的整数。 返回真实的int,回显它也是如此。不太确定这里发生了什么,我们将不胜感激。 问题答案: 可能是因为您将查询用双引号引起来,但是变量用单引号引起来,因此将其视为文字,并且如果该列是int,则将得到0。 尝试这个: 另