sql >> Database >  >> RDS >> Mysql

Hoe Chinees karakter te detecteren in MySQL?

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

telt het aantal records met Chinese karakters in kolom col .

Problemen:

  • Ik weet niet zeker welke reeksen van hex Chinees vertegenwoordigen.
  • De test mag inclusief Koreaans en Japans. ("CJK")
  • In MySQL hebben 4-byte Chinese karakters utf8mb4 nodig in plaats van utf8 .

Uitwerking

Ik neem aan dat de kolom in de tabel CHARACTER SET utf8 is . In utf8-codering beginnen Chinese karakters met een byte tussen hex E2 en E9, of EF, of F0. Degenen die beginnen met hex E zullen 3 bytes lang zijn, maar ik controleer de lengte niet; de F0 zijn 4 bytes.

De regexp begint met ^(..)* , wat betekent "vanaf het begin van de tekenreeks (^ ), zoek 0 of meer (* ) 2 tekens (.. ) waarden. Daarna moet ofwel E . zijn -iets of F0A . Daarna kan er van alles gebeuren. Het E-iets is, meer specifiek, E gevolgd door 2,3,4,5,6,7,8,9 of F.

Willekeurig gekozen, ik zie dat codeert als de 3 hex bytes E88D89 , en 𠜎 codeert als de 4 hex bytes F0A09C8E .

Ik ken geen betere manier om een ​​string voor een specifieke taal te controleren.

Zoals je hebt ontdekt, kan de REGEXP nogal traag zijn.

Deze regexp kan overkill zijn, in die zin dat sommige niet-Chinese karakters kunnen worden vastgelegd.




  1. Hoe alle verbonden subgrafieken van een ongerichte grafiek te vinden?

  2. Op tijd gebaseerde prioriteit in Active Record Query

  3. Mysql-fout:de gebruiker die is opgegeven als een definitie ('mysql.infoschema'@'localhost') bestaat niet' bij het dumpen van tabelruimten

  4. Verplaats knoop in geneste set