我想结合几篇文章来完整地回答这个问题,因为它看起来确实是几个步骤。
以上建议来自@madtracey
-等一下-等一下
[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
使用这个set -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%')
在编辑器中复制粘贴输出,当连接到正确的db时,将所有|替换为无post回mysql。
这就是我要做的一切,而且似乎对我很有效。不是-Dfile。encoding=UTF-8未启用,它似乎按预期工作
还有问题吗?
我当然是在生产中,所以事实证明你确实需要检查上面所做的事情,因为它有时不起作用,这里是原因和解决方案:
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
都能正常工作