En teoría, podrías hacer esto:
- Encuentre los rangos Unicode que desea probar.
- Codifique manualmente el inicio y el final en UTF-8.
- 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!
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. :)