这是我的连接设置:
Connection conn = DriverManager。getConnection(url + dbName + "?useUnicode=true&characterEncoding=utf-8",用户名,密码);
我得到以下错误时轮胎添加一行到一个表:
错误的字符串值:'\xF0\x90\x8D\x83\xF0\x90…在第1行为“content”列
我插入数千条记录,当文本包含\xF0时,我总是得到这个错误(即不正确的字符串值总是以\xF0开始)。
列的排序规则是utf8_general_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设置。
就我而言,我尝试了以上所有方法,但都没用。我非常确定,我的数据库如下所示。
mysql Ver 14.14 Distrib 5.7.17, for Linux (x86_64) using EditLine wrapper
Connection id: 12
Current database: xxx
Current user: yo@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.7.17-0ubuntu0.16.04.1 (Ubuntu)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /var/run/mysqld/mysqld.sock
Uptime: 42 min 49 sec
Threads: 1 Questions: 372 Slow queries: 0 Opens: 166 Flush tables: 1 Open tables: 30 Queries per second avg: 0.144
所以,我在每个表中查找列字符集
show create table company;
原来列字符集是拉丁文。这就是为什么我无法将中文插入数据库。
ALTER TABLE company CONVERT TO CHARACTER SET utf8;
这可能对你有帮助。:)
提示:在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;