6

我又遇到了一个奇怪而棘手的问题。

我一直在将我的 MySQL 数据库(以及我服务器上的所有其他内容)转换为 UTF-8,以避免在获取文本并将其放入不同数据库时必须转换文本。

我想我已经部​​分成功了,因为SHOW VARIABLES LIKE 'character_set%'回报:

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

但仍然mysql_client_encoding($con);返回latin1,并且在输出中每个特殊字符都被替换为 �。我的结论是客户端或 PHP 和 MySQL 数据库之间的连接正在使用 latin1,即使我已经在文档标题和 my.ini 中使用以下代码指定了 utf-8:

character-set-server = utf8
character-set-client = utf8
default-character-set = utf8

编辑:我在 [client]、[mysqld] 和 [mysql] 下都添加了上面的设置

当我使用mysql_query('SET NAMES utf8;');mysql_set_charset("utf8");文本正确显示但对我来说这不是一个解决方案,只是一个临时修复。

有谁知道如何强制 PHP(或任何它恢复为 latin1)使用 utf-8?

我应该提到我正在使用 Windows 2003 Server 和 Apache 2。

4

1 回答 1

2

我一直在将我的 MySQL 数据库(以及我服务器上的所有其他内容)转换为 UTF-8,以避免在获取文本并将其放入不同数据库时必须转换文本。

您仍然必须确保目标数据库(或系统)默认设置为使用 UTF-8 - 并且您用来连接的库使用正确的字符集。仅仅因为数据采用 UTF-8 格式并不能使其普遍兼容。

当我使用 mysql_query('SET NAMES utf8;'); 或 mysql_set_charset("utf8"); 文字显示正确,但对我来说这不是一个解决方案,只是一个临时修复。

这是正确的解决方案。由于您的连接编码决定了您的客户端(在本例中为 PHP)如何接收数据。

将其设置为默认值;您需要适当地配置 MySQL,然后重新启动服务器:

[client]
default-character-set=UTF8

请注意,这会影响所有客户端,甚至是命令行mysql客户端。

于 2012-08-30T19:35:56.250 回答