这是我的连接设置:
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;
同样的问题,要保存utf8mb4的数据,需要确保:
Character_set_client、character_set_connection、character_set_results为utf8mb4: Character_set_client和character_set_connection为客户端发送语句的字符集,character_set_results为服务器端返回查询结果给客户端的字符集。
看到charset-connection。
表和列编码为utf8mb4
对于JDBC,有两种解决方案:
解决方案一(需要重启MySQL):
修改my.cnf,重启MySQL:
(mysql)
default-character-set = utf8mb4
(mysqld)
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
这可以确保数据库和character_set_client、character_set_connection、character_set_results默认为utf8mb4。
重新启动MySQL
将表和列编码更改为utf8mb4
停止在jdbc连接器中指定characterEncoding=UTF-8和characterSetResults=UTF-8,因为这将覆盖character_set_client, character_set_connection, character_set_results到utf8
解决方案二(不需要重启MySQL):
将表和列编码更改为utf8mb4
在jdbc连接器中指定characterEncoding=UTF-8,因为jdbc连接器不支持utf8mb4。
像这样写你的sql语句(需要添加allowMultiQueries=true到jdbc连接器):
SET NAMES utf8mb4;INSERT INTO Mytable…
这将确保到服务器、character_set_client、character_set_connection、character_set_results的每个连接都是utf8mb4。
参见字符集连接。