【发布时间】:2014-02-16 23:04:46
【问题描述】:
有什么方法可以编写带有where 子句的select 查询,忽略非拉丁字符?
例如有立陶宛字符Ė,显然拉丁字符的等价物是E。那么无论如何我可以写一个这样的查询:
SELECT * FROM `table` WHERE `keyword` LIKE %E%;
我希望它返回包含以下任何字符的所有记录:E,Ė,Ę,有什么方法可以使用 SQL(甚至在 PHP 级别)自动实现这一点?
【问题讨论】:
有什么方法可以编写带有where 子句的select 查询,忽略非拉丁字符?
例如有立陶宛字符Ė,显然拉丁字符的等价物是E。那么无论如何我可以写一个这样的查询:
SELECT * FROM `table` WHERE `keyword` LIKE %E%;
我希望它返回包含以下任何字符的所有记录:E,Ė,Ę,有什么方法可以使用 SQL(甚至在 PHP 级别)自动实现这一点?
【问题讨论】:
你没有说你尝试了什么。你也没有说你的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
这是个好主意,因为这样您就有机会通过索引加快搜索速度。
【讨论】: