Mysql服务器的编码与客户端(latin1 vs utf8mb4)不同。有多糟糕?

时间:2017-12-21 02:18:32

标签: mysql encoding

我正在设计一个php web-app,并且难以理解与编码相关的Mysql变量的含义以及它们之间如何相互作用。服务器的编码设置为latin1,但客户端是utf8mb4。

在数据库中运行mysql查询

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

给出以下内容:

character_set_client = utf8mb4
character_set_connection = utf8mb4
character_set_database = latin1
character_set_filesystem = binary
character_set_results = utf8mb4
character_set_server = latin1
character_set_system = utf8
collation_connection = utf8mb4_unicode_ci
collation_database = latin1_swedish_ci
collation_server = latin1_swedish_ci

如果我将mysql服务器的字符集更改为utf8mb4,我害怕遇到latin1中的旧数据库的问题,但我当然希望将utf8mb4用于我创建的新数据库。要正确地提供和检索数据库中的数据,服务器和客户端的编码和校对是否始终相同?任何见解都会受到赞赏吗?

1 个答案:

答案 0 :(得分:0)

其中一些VARIABLES 必须同意客户端中使用的编码。

CREATE TABLE ...指定如何将它们存储在表格中。

如果这两者不同,那么MySQL将在客户端编码表编码之间转换“在线”。

如果这意味着将韩文字符(在utf8或utf8mb4中编码)转换为latin1编码,则无法进行。另一方面,西欧的所有重音字母都在latin1和utf8中编码,所以没有问题。

阅读此内容以了解常见问题: Trouble with UTF-8 characters; what I see is not what I stored

请参阅ALTER TABLE .. CONVERT TO ..将一个表中的所有字符列转换为不同的编码(假设它已正确存储以开始)。