sql >> Databasteknik >  >> RDS >> Mysql

Hur upptäcker man kinesiska tecken i MySQL?

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

kommer att räkna antalet poster med kinesiska tecken i kolumnen col .

Problem:

  • Jag är inte säker på vilka hex-intervall som representerar kinesiska.
  • Testet kan inkluderar koreanska och japanska. ("CJK")
  • I MySQL behöver 4-byte kinesiska tecken utf8mb4 istället för utf8 .

Utveckling

Jag antar att kolumnen i tabellen är CHARACTER SET utf8 . I utf8-kodning börjar kinesiska tecken med en byte mellan hex E2 och E9, eller EF eller F0. De som börjar med hex E kommer att vara 3 byte långa, men jag kontrollerar inte längden; F0-en kommer att vara 4 byte.

Regexp börjar med ^(..)* , som betyder "från början av strängen (^ ), leta upp 0 eller fler (* ) 2-tecken (.. ) värden. Efter det borde vara antingen E -någonting eller F0A . Efter det kan allt hända. E-något är mer specifikt E följt av någon av 2,3,4,5,6,7,8,9 eller F.

Vald slumpmässigt ser jag den kodar som 3 hexbyte E88D89 och 𠜎 kodar som 4 hexbyte F0A09C8E .

Jag vet inte om ett bättre sätt att kontrollera en sträng för ett specifikt språk.

Som du upptäckt kan REGEXP vara ganska långsam.

Detta regexp kan vara överdödande, eftersom vissa icke-kinesiska karaktärer kan fångas.




  1. Varför ska vi ha en ID-kolumn i användartabellen?

  2. hur använder man mysql now()-funktionen i cakephp för datumfält?

  3. Överför kontrollen till en specifik rad med hjälp av kommandot Goto Label i PLSQL

  4. MySql PHP välj antalet distinkta värden från kommaseparerade data (taggar)