代码之家  ›  专栏  ›  技术社区  ›  Gazillion

innodb mysql表中不区分重音的搜索!

  •  1
  • Gazillion  · 技术社区  · 16 年前

    我正在编写一个简单的搜索脚本,它可以浏览特定表的两列。从本质上说,我在寻找一个公司的号码或他们的名字之间的匹配。我在SQL中使用like语句是因为我在使用innodb表(这意味着没有全文搜索)。

    问题是我在双语环境中工作(法语和英语),法语中的一些字符有重音。我希望重音字符被视为与它们的非重音对应字符相同,换句话说=e、e==a等。因此,有许多与此问题相关的问题,但似乎没有一个对我有用。

    这是我的SQL语句:

    SELECT id, name FROM clients WHERE id LIKE '%éc%' OR name LIKE '%éc%';
    

    我想找到“科尔”和“伊科尔”,但它只找到“科尔”。

    我还想指出,我的表都是utf8_-general_-ci。

    帮我堆溢出,你是我唯一的希望!:)

    2 回复  |  直到 16 年前
        1
  •  3
  •   Jake N    16 年前

    我再给你一个答案。

    我刚读过 utf8_general_ci 不区分重音,所以你应该没事。

    一种解决方案是使用

     mysql_query("SET NAMES 'utf8'"); 
    

    这将告诉客户端发送SQL语句的字符集。

    另一个解决方案似乎是使用MySQL HEX() 函数将重音字符转换为十六进制值。但是在阅读了mysql文档之后,我找不到任何关于这个工作的好例子。 六() 看起来可能不起作用。

        2
  •  0
  •   Jake N    16 年前

    您可能应该考虑将问题字符转换为对应的英文字符,然后将它们存储在不同的列中,可能称为 searchable 或类似的。当您的主列被更新时,您就需要更新这个。

    然后将有两列,一列包含重音字符,另一列包含纯英语可搜索内容。

    推荐文章