sql >> Databáze >  >> RDS >> Mysql

Jak zjistit čínský znak v MySQL?

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í utf8mb4 místo utf8 .

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.




  1. Proč klíčové slovo MYSQL IN nebere v úvahu hodnoty NULL

  2. MySQL na kaskádě mazání. Testovací příklad

  3. Příkaz aktualizace MySQL nefunguje

  4. Co jsou databáze?