2017-12-27 393 views
1

我已经处理latin1使用collowing命令utf8mb4作为建议hereMySQL数据库 - 字符集和归类转换为utf8mb4和utf8mb4_unicode_ci?

ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 

要检查的转换进行了适当转换我的MySQL数据库的字符集和校对,我已经运行下面的命令。

SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' 
    OR Variable_name LIKE 'collation%' 

输出是

enter image description here

虽然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

+0

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