2011-11-03 155 views
1

我有一个Mysql数据库(在utf8_general_ci中)并且必须查询包含特殊字符的列。问题是:包含特殊字符的查询不会检索任何结果 - 但包含这些字符的常规版本的查询会执行。UTF8数据库查询和特殊字符

举例来说,如果我要查询单词“ETE”:

  • SELECT ... WHERE LIKE%ETE%列将无法正常工作。
  • SELECT ... WHERE column LIKE%ete%将工作!

这个问题必须是由于我的编码(两个查询都直接在phpMyAdmin中完成)。

我使用PDO,并按照这里的指令(http://stackoverflow.com/questions/279170/utf-8-all-the-way-through)和连接到数据库时,执行exec(“SET CHARACTER SET utf8“)和exec(”SET collat​​ion_connection ='utf8_general_ci'“)。令我困扰的是,除了这个搜索查询之外,该网站对于显示和数据库似乎都可以很好地与utf8一起工作。

我认为我可以对包含特殊字符的字符串进行transliterate_to_ascii操作。然而,我担心这个选项并不理想,特别是对于非欧洲语言。 非常感谢您的帮助!

+1

后立即运行mysql的SET NAMES utf8;显示你正在使用 –

+0

@Pekka用于查询的代码:SELECT * FROM翻译WHERE translations.content例如:SEARCH_TERMS + $查询 - > bindParam(': search_terms',$ search_terms) – Raphael

+1

显示您用于查询的完整代码 –

回答

0

请尝试连接

+0

谢谢埃德森,我试过了,但还不够 – Raphael

+0

好的问题是,为了运行查询,我在搜索条件中应用了strtolower,并用LOWER()转换了mysql列的内容。这似乎截断了特殊字符,并解释了为什么查询只适用于常规字符。 – Raphael

+1

您需要更改字段的排序规则 –