2

我在一个表中有一个列是一个字符串,其中一些字符串中有泰语,所以一个泰语字符串的例子是:

อักษรไทย

有没有这样的方法可以在一列中查询/查找这样的字符串?

4

2 回答 2

4

您可以搜索以泰语 Unicode 块中的字符开头的字符串(即在 U+0E01 和 U+0E5B 之间):

WHERE string BETWEEN 'ก' AND '๛'

当然,这不包括以其他字符开头并继续包含泰语的字符串,例如以数字开头的字符串。为此,您将不得不使用性能低得多的正则表达式:

WHERE string RLIKE '[ก-๛]'

但是请注意手册中的警告:

警告

REGEXPand运算符以RLIKE字节方式工作,因此它们不是多字节安全的,并且可能会产生与多字节字符集有关的意外结果。此外,这些运算符通过字节值比较字符,即使给定的排序规则将它们视为相等,重音字符也可能不会比较相等。

于 2013-09-19T07:27:40.777 回答
0

您可以在字符集之间进行一些来回转换。

where convert(string, 'AL32UTF8') =
      convert(convert(string, 'TH8TISASCII'), 'AL32UTF8', 'TH8TISASCII' )

如果字符串仅由泰语和 ASCII 组成,则为真,所以如果您添加

AND convert(string, 'AL32UTF8') != convert(string, 'US7ASCII')

您过滤掉仅由 ASCII 组成的字符串,得到由泰语组成的字符串。

不幸的是,如果您的字符串包含 ASCII 和泰语之外的内容,这将不起作用。

注意:根据您的数据库默认编码,某些转换可能是多余的。

于 2013-09-19T09:23:17.253 回答