mysql:在数据库中查找西里尔文或希腊文

时间:2012-01-10 16:52:12

标签: mysql select unicode

我在MySQL中有一个包含名称的UTF8表,包含所有类型的文本(数字,大写字母,希腊语,cycrillic等)。

---------------
ID   Name
---------------
001  Jane Smith
002  John Doe
003  Джемз Смис
004  Пэтра Смис
005  "Groove" Holme
006  99er Dude

如何只选择西里尔字母? (记录003和004)

修改

感谢下面的答案,看起来它是正确的,但没有用。更多的研究在文档中提到了这一点:

  

警告

     

REGEXP和RLIKE运算符以字节方式工作,因此它们是   不是多字节安全的,并且可能会产生多字节的意外结果   字符集。另外,这些运算符比较字符   它们的字节值和重音字符可能无法相等   即使给定的校对将它们视为平等。

编辑编辑,解决方案

我通过在我的数据库中添加一个额外字段来解决这个问题,该字段存储脚本类型,例如Cyrillic,Thai等。然后在PHP中运行一个批处理过程来检测脚本并将信息存储在数据库中。

要在PHP中检测脚本,请使用Unicode正则表达式函数。见本页:

http://www.regular-expressions.info/unicode.html

1 个答案:

答案 0 :(得分:7)

我不知道它是否涵盖了所有角色,但你应该可以使用它:

SELECT * FROM table WHERE Name REGEXP '[Α-Ωα-ωА-Яа-я]'

将返回包含至少一个西里尔字母或希腊字符的所有条目

修改

检查OP关于REGEXP / RLIKE以字节方式工作的问题中的“警告”,这样它们可能不适用于多字节字符集。