对非拉丁字符不敏感的SQL查询?

时间:2014-01-26 01:02:09

标签: php mysql sql collation

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

例如,有立陶宛字符Ė,显然拉丁字符的等效字符为E。所以我还是可以这样写一个查询:

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

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

1 个答案:

答案 0 :(得分:2)

你没说你尝试过的。您也没有说明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

这是一个好主意,因为那时你有机会为你的搜索加速索引。