【问题标题】:MySQL database - conversion of characterset and collation to utf8mb4 and utf8mb4_unicode_ci?MySQL 数据库 - 将字符集和排序规则转换为 utf8mb4 和 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 中?

同样,collat​​ion_connection 和 collat​​ion_database 在 utf8mb4_unicode_ci 中,但 collat​​ion_server 仍然在 latin1_swedish_ci 中

【问题讨论】:

  • SELECT HEX(col) ... 看看一些非英文字符的样子。这将有助于验证转换是否正确。

标签: mysql character-encoding


【解决方案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 中更改此值,但这是多余的,因为如果您已经为每个数据库指定了字符集。

【讨论】:

    猜你喜欢
    • 2023-03-17
    • 1970-01-01
    • 2018-12-19
    • 1970-01-01
    • 2011-09-01
    • 2018-09-30
    • 2012-07-27
    • 1970-01-01
    相关资源
    最近更新 更多