2

我一直在寻找几个小时来寻找这个答案,但似乎还没有涵盖。我会尽量简洁。

我有一个客户端运行一个有一些字符编码问题的网络应用程序。规格:

  • CentOS 6.3
  • MySQL 服务器 5.1.67
  • 所有表都设置为 UTF-8
  • SHOW FULL COLUMNS 还验证每个表中的所有文本列都是 UTF-8
  • 进入数据库的数据是 UTF-8
  • 数据以 UTF-8 格式提供给 Web 客户端
  • 输出数据中没有坏字符;强制浏览器使用 Latin1 会导致各种问题

所以,基本上,一切都是 UTF-8,一切都运行良好。

除了...与 MySQL 的所有连接都必须是 Latin1,否则整个系统就会崩溃。我已经用控制台 MySQL 客户端、PHP/Mysql、PHP/Mysqli 和 Ruby mysql gem v2.8.1 验证了这一点。发出“SET NAMES utf8”之类的命令或使用各种 API 方法将连接字符集更改为 UTF-8 会导致所有多字节字符变为乱码且无法识别。

目前这里没有什么大问题,当然除了在我的 Ubuntu 测试环境中使用 Latin1 连接到服务器根本不起作用,所以当我将它们投入生产时,我的程序会不断中断。但我有一种挥之不去的感觉,有些事情不可能是对的,以后它会回来咬我的客户。

MySQL 在初始连接到服务器时报告此问题:

character_set_client: latin1
character_set_connection: latin1
character_set_database: latin1
character_set_filesystem: binary
character_set_results: latin1
character_set_server: latin1
character_set_system: utf8

这些是适用于 UTF-8 数据的设置。如果我将其他任何内容更改为 UTF-8,多字节字符就会惨死。

如果有人知道这里出了什么问题以及我可以在哪里找到更好的文档,那将不胜感激。

4

0 回答 0