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

问题描述 投票:0回答:1

我正在设计一个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用于我创建的新数据库。要正确地提供和检索数据库中的数据,服务器和客户端的编码和校对是否始终相同?任何见解都会受到赞赏吗?

mysql encoding
1个回答
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 ..,将一个表中的所有字符列转换为不同的编码(假设它已正确存储以开始)。

© www.soinside.com 2019 - 2024. All rights reserved.