我正在设计一个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用于我创建的新数据库。要正确地提供和检索数据库中的数据,服务器和客户端的编码和校对是否始终相同?任何见解都会受到赞赏吗?
答案 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 ..
将一个表中的所有字符列转换为不同的编码(假设它已正确存储以开始)。