sql >> Databasteknik >  >> RDS >> Mysql

Hur man identifierar ett språk i utf-8-kolumnen i MySQL

Nåväl, låt oss börja med en tabell som jag lägger in här . Det står till exempel att E381yy är utf8-kodningen för Hiragana och E383yy är Katakana (japanska). (Kanji är en annan sak.)

För att se om en utf8-kolumn innehåller Katakana, gör något liknande

WHERE HEX(col) REGEXP '^(..)*E383'

Kyrillisk kan vara

WHERE HEX(col) REGEXP '^(..)*D[0-4]'

Kinesiska är lite knepigt, men det kanske vanligtvis arbeta för kinesiska (och kanji?):

WHERE HEX(col) REGEXP '^(..)*E[4-9A]'

(Jag kommer att ändra din titel för att undvika sökordet "teckenuppsättning".)

Västeuropa (inklusive, men inte begränsat till, franska) C[23] , turkiska (ungefär och några andra) (C4|C59) , grekiska:C[EF] , hebreiska:D[67] , indiska, etc:E0 , arabiska/farsi/persiska/urdu:D[89AB] . (Alltid prefix med ^(..)* .

Du kanske märker att dessa inte nödvändigtvis är särskilt specifika. Detta beror på överlappningar. Brittisk engelska och amerikansk engelska kan inte särskiljas förutom genom stavning av några få ord. Flera bokstäver med accent delas på olika sätt i Europa. Indien har många olika karaktärsuppsättningar:Devanagari, Bengali, Gurmukhi, Gujarati, etc.; dessa är förmodligen urskiljbara, men det skulle kräva mer forskning. Jag tror att arabiska/farsi/persiska/urdu delar en teckenuppsättning.

Lite mer:

| SAMARITAN                     | E0A080        | E0A0BE        |
| DEVANAGARI                    | E0A480        | E0A5BF        |
| BENGALI                       | E0A681        | E0A7BB        |
| GURMUKHI                      | E0A881        | E0A9B5        |
| GUJARATI                      | E0AA81        | E0ABB1        |
| ORIYA                         | E0AC81        | E0ADB1        |
| TAMIL                         | E0AE82        | E0AFBA        |
| TELUGU                        | E0B081        | E0B1BF        |
| KANNADA                       | E0B282        | E0B3B2        |
| MALAYALAM                     | E0B482        | E0B5BF        |
| SINHALA                       | E0B682        | E0B7B4        |
| THAI                          | E0B881        | E0B99B        |
| LAO                           | E0BA81        | E0BB9D        |
| TIBETAN                       | E0BC80        | E0BF94        |

Så, för DEVANAGARI, '^(..)*E0A[45]'




  1. Hur man subtraherar minuter från ett Datetime-värde i MariaDB

  2. Puma Cluster-konfiguration på Heroku

  3. SQL Server-väntehändelser -1

  4. Hur väljer man den n:e raden i en SQL-databastabell?