sql >> Base de Datos >  >> RDS >> Mysql

Cómo identificar un idioma en la columna utf-8 en MySQL

Bueno, comencemos con una tabla que puse aquí . Dice, por ejemplo, que E381yy es la codificación utf8 para Hiragana y E383yy es Katakana (japonés). (Kanji es otro asunto.)

Para ver si una columna utf8 contiene Katakana, haga algo como

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

El cirílico podría ser

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

El chino es un poco complicado, pero esto podría generalmente trabajo para chino (¿y kanji?):

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

(Voy a cambiar su título para evitar la palabra clave 'juego de caracteres').

Europa occidental (incluido, entre otros, francés) C[23] , turco (aprox. y algunos otros) (C4|C59) , griego:C[EF] , hebreo:D[67] , indio, etc.:E0 , árabe/farsi/persa/urdu:D[89AB] . (Siempre prefijo con ^(..)* .

Puede notar que estos no son necesariamente muy específicos. Esto se debe a las superposiciones. El inglés británico y el inglés americano no se pueden distinguir excepto por la ortografía de unas pocas palabras. Varias letras acentuadas se comparten de varias maneras en Europa. India tiene muchos conjuntos de caracteres diferentes:devanagari, bengalí, gurmukhi, gujarati, etc.; estos son probablemente distinguibles, pero se necesitaría más investigación. Creo que árabe/farsi/persa/urdu comparten un conjunto de caracteres.

Algunas más:

| 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        |

Entonces, para DEVANAGARI, '^(..)*E0A[45]'