我在MySQL中遇到了编码问题,我需要一些帮助来弄清楚发生了什么。解密MySQL编码
首先,一些参数。该表的默认编码是utf8。然而,character_set_client,character_set_connection,collation_connection和character_set_server MySQL系统变量都是latin1。
我SSH入我的MySQL服务器,并使用本地命令行客户端连接到本地服务器。我选择记录/列和返回的字符串,假设字符以A返回,这是正确的。 A在UTF-8中用十六进制表示为“C5 9F”。
但是,命中服务器的PHP应用程序将其解释为XY。在MySQL命令行客户端中,如果我发送命令“SET NAMES utf8”,它现在也将显示为XY。
如果我选择INTO OUTFILE并使用hexedit编辑文件,我会看到两个映射到X的十六进制字符,然后是映射到Y的两个十六进制字符(X为“c3 85”,“C5 B8”对于Y)。基本上,它采用两个十六进制值并将它们确实显示为UTF8字符。
首先,它看起来像数据库确实存储的东西为UTF8,但错误的UTF8种,正确吗?它们是否以原始Unicode的形式进入,但不知何故,也许是因为系统变量,它不会被转换为UTF8?
二,MySQL命令行客户端如何/为什么将XY正确解释为A?
最后,为了成功解释MySQL命令行,是否有图表显示C3 85 C5 B8如何转换为A,或者XY转换为A?
非常感谢任何见解。