MySQL 数据库 - 将字符集和排序规则转换为 utf8mb4 和 utf8mb4_unicode_ci?
Posted
技术标签:
【中文标题】MySQL 数据库 - 将字符集和排序规则转换为 utf8mb4 和 utf8mb4_unicode_ci?【英文标题】:MySQL database - conversion of characterset and collation to utf8mb4 and utf8mb4_unicode_ci? 【发布时间】:2018-06-08 09:28:43 【问题描述】:我已按照here 的建议使用以下命令将我的 mysql 数据库的字符集和排序规则从 latin1 转换为 utf8mb4。
ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
为了检查转换是否正确完成,我运行了以下命令。
SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%'
OR Variable_name LIKE 'collation%'
输出是
虽然 character_set_client、character_set_connection、character_set_database、character_set_results 现在是 utf8mb4,但 character_set_filesystem 是二进制,而 character_set_server 仍然是拉丁文。这些到底是什么以及为什么它仍然不在 utf8mb4 中?
同样,collation_connection 和 collation_database 在 utf8mb4_unicode_ci 中,但 collation_server 仍然在 latin1_swedish_ci 中
【问题讨论】:
做SELECT HEX(col) ...
看看一些非英文字符的样子。这将有助于验证转换是否正确。
【参考方案1】:
https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_character_set_filesystem
此变量用于解释引用文件名的字符串文字,例如在 LOAD DATA INFILE 和 SELECT ... INTO OUTFILE 语句和 LOAD_FILE() 函数中。在尝试打开文件之前,此类文件名会从 character_set_client 转换为 character_set_filesystem。默认值为二进制,表示不进行转换。
您可能不需要更改此值。
https://dev.mysql.com/doc/refman/5.7/en/charset-server.html
如果在 CREATE DATABASE 语句中未指定数据库字符集和排序规则,则使用服务器字符集和排序规则作为默认值。他们没有其他目的。
您可以在 /etc/my.cnf
中更改此值,但这是多余的,因为如果您已经为每个数据库指定了字符集。
【讨论】:
以上是关于MySQL 数据库 - 将字符集和排序规则转换为 utf8mb4 和 utf8mb4_unicode_ci?的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server - 将 varchar 转换为另一个排序规则(代码页)以修复字符编码