我想结合几个帖子来对此做一个完整的答案,因为这似乎只是几个步骤。
- 以上@madtracey的建议
/etc/mysql/my.cnf
要么 /etc/mysql/mysql.conf.d/mysqld.cnf
[mysql]
default-character-set=utf8mb4
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0
[mysqld]
##
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
再从上面的建议所有JDBC连接了characterEncoding=UTF-8
和characterSetResults=UTF-8
从中取出
与此设置-Dfile.encoding=UTF-8
似乎没有什么区别。
我仍然无法将国际文本写入db,得到与上述相同的失败
现在使用此方法来转换整个MySQL数据库字符集和归类到utf-8
更新所有数据库以使用 utf8mb4
ALTER DATABASE YOURDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
运行此查询,该查询将为您提供所需的梯级
SELECT CONCAT(
'ALTER TABLE ', table_name, ' CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ',
'ALTER TABLE ', table_name, ' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ')
FROM information_schema.TABLES AS T, information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` AS C
WHERE C.collation_name = T.table_collation
AND T.table_schema = 'YOURDB'
AND
(C.CHARACTER_SET_NAME != 'utf8mb4'
OR
C.COLLATION_NAME not like 'utf8mb4%')
在编辑器中复制粘贴输出替换所有| 连接到正确的数据库时,没有任何内容发回到mysql中。
这就是所有要做的事情,并且似乎对我来说都是有效的。未Dfile.encoding=UTF-8
启用- 未启用,它似乎可以正常工作
E2A仍然有问题吗?
我当然在生产中,因此事实证明您确实需要检查以上内容,因为有时它不起作用,这是这种情况下的原因和解决方法:
show create table user
`password` varchar(255) CHARACTER SET latin1 NOT NULL,
`username` varchar(255) CHARACTER SET latin1 NOT NULL,
您可以看到仍有一些拉丁文尝试手动更新记录:
ALTER TABLE user CONVERT TO CHARACTER SET utf8mb4;
ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
因此,我们将其范围缩小:
mysql> ALTER TABLE user change username username varchar(255) CHARACTER SET utf8mb4 not NULL;
ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
mysql> ALTER TABLE user change username username varchar(100) CHARACTER SET utf8mb4 not NULL;
Query OK, 5 rows affected (0.01 sec)
简而言之,为了使更新生效,我不得不减小该字段的大小。
现在,当我运行时:
mysql> ALTER TABLE user CONVERT TO CHARACTER SET utf8mb4;
Query OK, 5 rows affected (0.01 sec)
Records: 5 Duplicates: 0 Warnings: 0
一切正常