我在一个表中有一个列是一个字符串,其中一些字符串中有泰语,所以一个泰语字符串的例子是:
อักษรไทย
有没有这样的方法可以在一列中查询/查找这样的字符串?
您可以搜索以泰语 Unicode 块中的字符开头的字符串(即在 U+0E01 和 U+0E5B 之间):
WHERE string BETWEEN 'ก' AND '๛'
当然,这不包括以其他字符开头并继续包含泰语的字符串,例如以数字开头的字符串。为此,您将不得不使用性能低得多的正则表达式:
WHERE string RLIKE '[ก-๛]'
但是请注意手册中的警告:
警告
REGEXP
and运算符以RLIKE
字节方式工作,因此它们不是多字节安全的,并且可能会产生与多字节字符集有关的意外结果。此外,这些运算符通过字节值比较字符,即使给定的排序规则将它们视为相等,重音字符也可能不会比较相等。
您可以在字符集之间进行一些来回转换。
where convert(string, 'AL32UTF8') =
convert(convert(string, 'TH8TISASCII'), 'AL32UTF8', 'TH8TISASCII' )
如果字符串仅由泰语和 ASCII 组成,则为真,所以如果您添加
AND convert(string, 'AL32UTF8') != convert(string, 'US7ASCII')
您过滤掉仅由 ASCII 组成的字符串,得到由泰语组成的字符串。
不幸的是,如果您的字符串包含 ASCII 和泰语之外的内容,这将不起作用。
注意:根据您的数据库默认编码,某些转换可能是多余的。