SELECT COUNT(*)
FROM tbl
WHERE HEX(col) REGEXP '^(..)*(E[2-9F]|F0A)'
bude počítat počet záznamů s čínskými znaky ve sloupci col .
Problémy:
- Nejsem si jistý, jaké rozsahy hex představují čínštinu.
- Test může zahrnují korejštinu a japonštinu. ("CJK")
- V MySQL 4bajtové čínské znaky potřebují
utf8mb4místoutf8.
Vypracování
Předpokládám, že sloupec v tabulce je CHARACTER SET utf8 . V kódování utf8 začínají čínské znaky bajtem mezi hex E2 a E9 nebo EF nebo F0. Ty začínající hex E budou mít délku 3 bajty, ale nekontroluji délku; ty F0 budou mít 4 bajty.
Regulární výraz začíná ^(..)* , což znamená "od začátku řetězce (^ ), vyhledejte 0 nebo více (* ) 2 znaky (.. ) hodnoty. Poté by mělo být buď E -něco nebo F0A . Poté se může stát cokoliv. E-něco je konkrétněji E následuje kterékoli z 2,3,4,5,6,7,8,9 nebo F.
Náhodně vybráno, vidím, že 草 zakóduje jako 3 hex bajty E88D89 a 𠜎 zakóduje jako 4 hexadecimální bajty F0A09C8E .
Neznám lepší způsob, jak zkontrolovat řetězec pro konkrétní jazyk.
Jak jste zjistili, REGEXP může být poměrně pomalý.
Tento regulární výraz může být přehnaný, protože mohou být zachyceny některé nečínské znaky.