我再次遇到一个奇怪而棘手的问题。
我一直在努力将我的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.
答案 0 :(得分:2)
我一直在努力转换我的MySQL数据库(以及一切 否则在我的服务器上)UTF-8以避免转换 获取文本并将文本放入不同的数据库时的文本。
您仍然需要确保目标数据库(或系统)默认设置为使用UTF-8 - 并且您用于连接的库是使用正确的字符集。仅仅因为数据是UTF-8并不能使它普遍兼容。
当我使用mysql_query时('SET NAMES utf8;');要么 mysql_set_charset( “UTF8”);文字显示正确,但对我来说 不是解决方案,只是暂时的解决方案。
这是正确的解决方案。由于您的连接编码决定了客户端(在本例中为PHP)接收数据的方式。
将其设为默认值;您需要configure MySQL appropriately然后重新启动服务器:
[client]
default-character-set=UTF8
请注意,这会影响所有客户端,甚至是命令行mysql
客户端。