【问题标题】:SQL query that is insensitive towards non-latin characters?对非拉丁字符不敏感的 SQL 查询?
【发布时间】:2014-02-16 23:04:46
【问题描述】:

有什么方法可以编写带有where 子句的select 查询,忽略非拉丁字符?

例如有立陶宛字符Ė,显然拉丁字符的等价物是E。那么无论如何我可以写一个这样的查询:

SELECT * FROM `table` WHERE `keyword` LIKE %E%;

我希望它返回包含以下任何字符的所有记录:E,Ė,Ę,有什么方法可以使用 SQL(甚至在 PHP 级别)自动实现这一点?

【问题讨论】:

    标签: php mysql sql collation


    【解决方案1】:

    你没有说你尝试了什么。你也没有说你的table 包含什么字符集(utf-8)和排序规则。这些是您默认控制这些事物的方式。

    你可以试试这个:

     SELECT * FROM `table` WHERE `keyword` COLLATE utf8_general_ci LIKE %E%
    

    或者这个

     SELECT * FROM `table` WHERE `keyword` COLLATE utf8_lithuanian_ci LIKE %E%
    

    我不知道第二个是否可以满足您的需求,因为我不懂立陶宛语。 E、Ė和Ę在字典中被认为是同一个字母吗?如果它们不是,那么立陶宛排序规则不会将它们相互匹配。

    如果您确实发现特定排序规则有效,您可以更改您的列以默认使用该排序规则。

    alter table `table`
      change `keyword` `keyword` collate utf8_lithuanian_ci
    

    这是个好主意,因为这样您就有机会通过索引加快搜索速度。

    【讨论】:

    • 说实话,我什么都没尝试,只是因为我不知道该尝试什么或谷歌搜索什么。除了在 PHP 数组中使用 char map 破解一些解决方案。无论如何,您建议的第一个查询似乎完全符合我的要求。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 2021-02-06
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    相关资源
    最近更新 更多