编辑:在我从最初的文章中得到反馈后,我修改了文本以澄清我的问题.
我有以下查询(伪代码):
$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 root@localhost 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我不知道为什么我不能选择任何名称有重音字符的行。
我真的希望有人能帮我。
更新1:我已经达成了妥协。我将在存储数据时使用from实体转换重音,在从DB检索数据时转换html_entity_decode。这似乎很管用。
到目前为止,我看到的唯一缺点是,我无法使用phpMySQL以明文形式读取名称。
发布于 2009-06-13 11:31:17
正如其他答案所示,这似乎是一个编码问题。我建议打开查询日志( query,http://dev.mysql.com/doc/refman/5.1/en/query-log.html ),因为它可以向您展示数据库实际接收到的内容。
UPDATE:我终于找到了一个页面,解释了PHPandUTF-8 (http://www.phpwact.org/php/i18n/charsets)的脏细节。此外,请确保您阅读了这个(http://niwo.mnsys.org/saved/~flavell/charset/form-i18n.html),以了解如何从表单帖子中获得正确的数据。
发布于 2009-06-13 09:46:19
我认为你应该返回$result而不是$this->query。
此外,您应该了解SQL注入,并考虑使用mysql_real_escape_string或准备好的语句来保护您免受此类攻击。addslashes并不是一种适当的保护。
发布于 2009-06-13 10:56:46
尝试这个查询。如果得到结果,则查询中的回勾字符会出现问题
SELECT * FROM sl_label WHERE name Like 'Church%'https://stackoverflow.com/questions/990396
复制相似问题