She*_*don 2 mysql utf-8 mysql-workbench chinese-locale
我需要计算一个列列表中的中文数量。例如,如果“????” 发生,这是中文的四个字符,但我只计算一次,因为它出现在列中。
有没有具体的代码来解决这个问题?
SELECT COUNT(*)
FROM tbl
WHERE HEX(col) REGEXP '^(..)*(E[2-9F]|F0A)'
Run Code Online (Sandbox Code Playgroud)
将计算列中包含汉字的记录数col
。
问题:
utf8mb4
代替utf8
.细化
我假设表中的列是CHARACTER SET utf8
. 在utf8编码中,汉字以十六进制E2和E9之间的一个字节开始,或者EF,或者F0。那些以十六进制 E 开头的将是 3 个字节长,但我没有检查长度;F0 的将是 4 个字节。
正则表达式开始用^(..)*
,意思是“从字符串的开始(^
),找到0个或多个(*
)2字符(..
)值,之后应该是E
-something或F0A
。在此之后,可能会发生什么。在E-东西,更具体地说,E
后跟 2、3、4、5、6、7、8、9 或 F 中的任何一个。
随机挑选,我看到?
编码为 3 hex bytes E88D89
,编码为 4 hex bytes
F0A09C8E
。
我不知道检查特定语言的字符串的更好方法。
正如您发现的,REGEXP 可能相当慢。
这个正则表达式可能会被过度使用,因为可能会捕获一些非中文字符。
归档时间: |
|
查看次数: |
2083 次 |
最近记录: |