Teoreticky byste mohli udělat toto:
- Najděte rozsahy Unicode, které chcete otestovat.
- Ručně zakódujte začátek a konec do UTF-8.
- Jako rozsah pro REGEXP použijte první bajt každého zakódovaného začátku a konce.
Domnívám se, že rozsah CJK je natolik vzdálený věcem, jako je symbol eura, že falešně pozitivních a falešně negativních bude málo nebo žádné.
Upravit: Nyní jsme uvedli teorii do praxe!
Krok 1: Vyberte rozsah znaků. Navrhuji \u3000-\u9fff; snadno se testuje a měl by nám poskytnout téměř dokonalé výsledky.
Krok 2: Kódovat do bajtů. (stránka Wikipedie utf-8)
Pro námi zvolený rozsah budou hodnoty kódované utf-8 vždy 3 bajty, z nichž první je 1110xxxx, kde xxxx jsou nejvýznamnější čtyři bity hodnoty unicode.
Chceme tedy machovat bajty v rozsahu 11100011 až 11101001 nebo 0xe3 až 0xe9.
Krok 3: Vytvořte náš regulární výraz pomocí velmi praktické (a mnou právě objevené) funkce UNHEX.
SELECT * FROM `mydata`
WHERE `words` REGEXP CONCAT('[',UNHEX('e3'),'-',UNHEX('e9'),']')
Jen jsem to zkusil. Funguje jako kouzlo. :)