编辑:从我原来的帖子反馈后,我改变了文本,以澄清我的问题。PHP/MySQL中的编码问题
我有以下查询(伪码):
$conn = mysql_connect('localhost', 'mysql_user', 'mysql_password');
mysql_query("SET NAMES 'utf8'; COLLATE='utf8_danish_ci';");
mysql_query("SELECT id FROM myTable WHERE name = 'Fióre`s måløye'", $conn);
这将返回0行。
在我的日志文件,我看到:
255 Connect [email protected] on
255 Query SET NAMES 'utf8'; COLLATE='utf8_danish_ci'
255 Init DB norwegianfashion
255 Query SELECT id FROM myTable WHERE name = 'Fióre`s måløye'
255 Quit
- 如果我直接在phpMyAdmin运行查询,我得到的结果。
- 表编码:UTF-8
- HTML页面编码:UTF-8
- 我可以添加记录(从形式输入),这里的名字使用口音(如 “Fióre`s海瑟伯格”)
- 我可以读带重音符号的使用记录时 - >“名称LIKE‘$标签%’”
- 在数据库中的信息看起来不错
我不知道为什么我不能选择哪个名字有重音字符的任意行。
我真的希望有人能帮助我。
更新1: 我已经达成妥协。我将在存储数据时将htmlentities和html_entity_decode转换为从数据库检索数据时的转换。这似乎工作。
迄今为止我看到的唯一缺点是我无法使用phpMySQL读取明文中的名称。
你可以按照脚本中的方式发送调用函数吗?你可以打印$ sql,看看它是什么样子? – 2009-06-13 09:35:50
完成。如果我使用输出的sql并直接在PHPMyADmin中使用它,它可以正常工作。我得到了我想要的结果。 – Steven 2009-06-13 10:15:43
你在上面声明该查询的PHP文件中使用了什么编码?您还需要使用UTF-8以避免冲突。 – Gumbo 2009-06-15 14:52:45