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

¿Cómo puedo consultar texto que contenga caracteres de idiomas asiáticos en MySQL?

En teoría, podrías hacer esto:

  1. Encuentre los rangos Unicode que desea probar.
  2. Codifique manualmente el inicio y el final en UTF-8.
  3. Utilice el primer byte de cada uno de los inicios y finales codificados como un rango para un REGEXP.

Creo que el rango CJK está lo suficientemente alejado de cosas como el símbolo del euro como para que los falsos positivos y los falsos negativos sean pocos o ninguno.

Editar: ¡Ahora hemos puesto la teoría en práctica!

Paso 1: Elija el rango de caracteres. Sugiero \u3000-\u9fff; fácil de probar y debería darnos resultados casi perfectos.

Paso 2: Codificar en bytes. (página de Wikipedia utf-8)

Para nuestro rango elegido, los valores codificados en utf-8 siempre serán de 3 bytes, el primero de los cuales es 1110xxxx, donde xxxx son los cuatro bits más significativos del valor Unicode.

Por lo tanto, queremos combinar bytes en el rango 11100011 a 11101001, o 0xe3 a 0xe9.

Paso 3: Haz nuestra expresión regular usando la función UNHEX muy práctica (y recién descubierta por mí).

SELECT * FROM `mydata`
WHERE `words` REGEXP CONCAT('[',UNHEX('e3'),'-',UNHEX('e9'),']')

Acabo de probarlo. Funciona de maravilla. :)