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

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

段干宾白
2023-03-14

以下是我的连接设置方式:
connection conn=DriverManager.getConnection(url dbName)?useUnicode=true

我在向表中添加行时遇到以下错误:
不正确的字符串值:“\xF0\x90\x8D\x83\xF0\x90…”用于第1行的“内容”列

我正在插入数千条记录,当文本包含\xF0(即,错误的字符串值总是以\xF0开头)时,我总是会遇到此错误。

该列的整理utf8_general_ci。

会有什么问题?


共有3个答案

谷梁楷
2023-03-14

遇到相同的问题,要使用utf8mb4保存数据,需要确保:

>

  • character_set_client,character_set_connection,character_set_resultsutf8mb4character_set_clientcharacter_set_connection表示客户端发送语句的字符集,character_set_results表示其中服务器将查询结果返回给客户端。
    请参见charset-连接。

    表和列编码为utf8mb4

    对于JDBC,有两种解决方案:

    >

    [mysql]
    default-character-set=utf8mb4
    
    [mysqld]
    character-set-server=utf8mb4
    collation-server=utf8mb4_unicode_ci
    

    这可以确保数据库character\u set\u客户端、character\u set\u连接、character\u set\u结果默认为utf8mb4

    重新启动MySQL

    将表和列编码更改为utf8mb4

    停止在jdbc连接器中指定characterEncoding=UTF-8characterSetResults=UTF-8,因为这将覆盖character\u set\u客户端character\u set\u连接character\u set\u结果utf8

    >

  • 将表和列编码改为utf8mb4

    在jdbc连接器中指定characterEncoding=UTF-8,会导致jdbc连接器不支持utf8mb4

    这样写你的sql语句(需要在jdbc连接器中添加alloMultiQuery=true):

    'SET NAMES utf8mb4;INSERT INTO Mytable ...';
    

    这将确保与服务器的每个连接、character\u set\u客户端、character\u set\u连接、character\u set\u结果都是utf8mb4
    另请参见charset connection。

  • 卜高超
    2023-03-14

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

    何兴安
    2023-03-14

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

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

    您可能还需要在MySQL配置文件中将服务器属性character\u set\u server设置为utf8mb4。似乎Connector/J默认为3字节Unicode,否则:

    例如,要将4字节UTF-8字符集用于连接器/J,请使用character\u set\u server=utf8mb4配置MySQL服务器,并将characterEncoding保留在连接器/J连接字符串之外。接头/J随后将自动检测UTF-8设置。

     类似资料:
    • 我的连接是这样设置的: 当tyring向表中添加一行时,我会遇到以下错误: 我正在插入数以千计的记录,当文本包含\xf0(即不正确的字符串值总是以\xf0开头)时,我总是得到这个错误。 列的排序规则是UTF8_GENERAL_CI。

    • 问题内容: 这是我的连接设置方式: 尝试在表中添加行时出现以下错误: 我要插入数千条记录,并且当文本包含\ 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

    • 问题内容: 我有一个带有“ñ”字符的字符串,并且我有一些问题。我需要将此字符串编码为UTF-8编码。我已经通过这种方式尝试过,但是没有用: 如何将该字符串编码为utf-8? 问题答案: Java中的对象使用无法修改的UTF-16编码。 唯一可以使用不同编码的是。因此,如果你需要UTF-8数据,则需要一个。如果你有一个包含意外数据的,则问题出在较早的地方,该错误地将一些二进制数据错误地转换为a (即

    • 问题内容: 从我的数据库即时通讯获取以下字符串: 它应该说的是: 我试图像这样将其转换为utf-8: 但是仍然是同样的问题。 有任何想法吗? 问题答案: 使用npm中的utf8模块对字符串进行编码/解码。 安装: 在浏览器中: 在Node.js中: API: 编码: 将任何给定的JavaScript字符串(字符串)编码为UTF-8,并返回该字符串的UTF-8编码版本。如果输入字符串包含非标量值(即