【发布时间】:2011-11-29 08:57:41
【问题描述】:
我在 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 的十六进制字符。(“c3 85”表示 X,“C5 B8”表示是)。基本上,它采用两个十六进制值并将它们显示为 UTF8 字符。
首先,看起来数据库确实将内容存储为 UTF8,但 UTF8 类型错误,对吗?它们是作为原始 Unicode 输入的,但不知何故,可能是因为系统变量,它没有被转换为 UTF8?
其次,MySQL 命令行客户端如何/为什么将 XY 正确解释为 A?
最后,对于MySQL命令行的成功解读,是否有图表显示C3 85 C5 B8是如何转换为A,或者XY是如何转换为A的?
非常感谢您提供任何见解。
【问题讨论】:
标签: mysql unicode encoding utf-8 internationalization