这是我的连接设置: Connection conn = DriverManager。getConnection(url + dbName + "?useUnicode=true&characterEncoding=utf-8",用户名,密码);

我得到以下错误时轮胎添加一行到一个表: 错误的字符串值:'\xF0\x90\x8D\x83\xF0\x90…在第1行为“content”列

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

列的排序规则是utf8_general_ci。

有什么问题吗?


当前回答

提示:在AWS RDS上,你需要一个新的参数组为你的MySQL数据库的参数(而不是编辑my.cnf)

collation_connection: utf8mb4_unicode_ci collation_database: utf8mb4_unicode_ci collation_server: utf8mb4_unicode_ci character_set_client: utf8mb4 character_set_connection: utf8mb4 character_set_database: utf8mb4 character_set_results: utf8mb4 character_set_server: utf8mb4

注意:character_set_system保持“utf8”

这些SQL命令不会永久工作-只在会话中:

set character_set_server = utf8mb4;
set collation_server = utf8mb4_unicode_ci;

其他回答

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

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

您可能还必须在MySQL配置文件中将服务器属性character_set_server设置为utf8mb4。Connector/J默认为3字节Unicode:

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

只做

ALTER TABLE `some_table` 
CHARACTER SET = utf8 , COLLATE = utf8_general_ci ;

ALTER TABLE `some_table` 
CHANGE COLUMN `description_with_latin_or_something` `description` TEXT CHARACTER SET 'utf8' NOT NULL ;

假设您正在使用phpmyadmin来解决此错误,请遵循以下步骤:

phpMyAdmin your_table “结构”选项卡 将字段的Collation从latin1_swedish_ci(或其他什么)更改为utf8_general_ci

这主要是由一些unicode字符引起的。对我来说,它是卢比的货币符号。

为了快速修复这个问题,我必须找出导致这个错误的字符。我把整个文本复制粘贴到一个文本编辑器中,比如vi,然后用一个文本替换掉麻烦的字符。

删除模式并使用utf8mb4字符集重新创建它解决了我的问题。