如何在MySQL中检测汉字?

时间:2016-01-28 12:40:25

标签: mysql utf-8 mysql-workbench chinese-locale

我需要在列表中计算中文的数量。例如,如果"北京实业"发生,这是中文的四个字符,但我只计算一次,因为它出现在列中。

有没有具体的代码来解决这个问题?

1 个答案:

答案 0 :(得分:2)

SELECT COUNT(*)
    FROM tbl
    WHERE HEX(col) REGEXP '^(..)*(E[2-9F]|F0A)'

将计算col列中包含中文字符的记录数。

问题:

  • 我不确定十六进制的范围代表中文。
  • 测试可能包括韩语和日语。 ( “CJK”)
  • 在MySQL中,4字节的汉字需要utf8mb4而不是utf8

<强>精化

我假设表中的列是CHARACTER SET utf8。在utf8编码中,中文字符以十六进制E2和E9之间或EF或F0之间的字节开头。以十六进制E开头的那些将是3个字节长,但我没有检查长度; F0将为4个字节。

正则表达式以^(..)*开头,意思是“从字符串的开头(^),找到0或更多(*)2个字符(..)在此之后应该是E - 某事或F0A。之后,任何事情都可能发生。更具体地说,E-something是E后跟2,3中的任何一个, 4,5,6,7,8,9或F。

随机选择,我看到编码为3个十六进制字节E88D89,而编码为4个十六进制字节F0A09C8E

我不知道检查特定语言字符串的更好方法。

如您所见,REGEXP可能相当慢。

这个正则表达式可能会过度杀戮,因为可能会捕获一些非中文字符。