In teoria potresti farlo:
- Trova gli intervalli Unicode per i quali desideri eseguire il test.
- Codifica manualmente l'inizio e la fine in UTF-8.
- Utilizza il primo byte di ogni inizio e fine codificati come intervallo per un REGEXP.
Credo che la gamma CJK sia abbastanza lontana da cose come il simbolo dell'euro che i falsi positivi e i falsi negativi sarebbero pochi o nessuno.
Modifica: Ora abbiamo messo in pratica la teoria!
Passaggio 1: Scegli la gamma di caratteri. Suggerisco \u3000-\u9fff; facile da testare e dovrebbe darci risultati quasi perfetti.
Passaggio 2: Codifica in byte. (Pagina Wikipedia utf-8)
Per il nostro intervallo scelto, i valori codificati utf-8 saranno sempre 3 byte, il primo dei quali è 1110xxxx, dove xxxx è i quattro bit più significativi del valore unicode.
Pertanto, vogliamo mach byte nell'intervallo da 11100011 a 11101001 o da 0xe3 a 0xe9.
Passaggio 3: Crea la nostra regexp usando la utilissima (e appena scoperta da me) funzione UNHEX.
SELECT * FROM `mydata`
WHERE `words` REGEXP CONCAT('[',UNHEX('e3'),'-',UNHEX('e9'),']')
Appena provato. Funziona come un incantesimo. :)