На теория можете да направите това:
- Намерете уникод диапазоните, за които искате да тествате.
- Ръчно кодирайте началото и края в UTF-8.
- Използвайте първия байт на всеки от кодираните начало и край като диапазон за REGEXP.
Вярвам, че диапазонът на CJK е достатъчно далеч от неща като символа на еврото, така че фалшивите положителни и фалшиво отрицателни резултати биха били малко или никакви.
Редактиране: Сега приложихме теорията на практика!
Стъпка 1: Изберете диапазона от знаци. Предлагам \u3000-\u9fff; лесен за тестване и трябва да ни даде почти перфектни резултати.
Стъпка 2: Кодирайте в байтове. (страница на Wikipedia utf-8)
За избрания от нас диапазон стойностите, кодирани в utf-8, винаги ще бъдат 3 байта, първият от които е 1110xxxx, където xxxx са най-значимите четири бита от стойността на unicode.
По този начин искаме да обработваме байтове в диапазона от 11100011 до 11101001 или от 0xe3 до 0xe9.
Стъпка 3: Направете нашия редовен израз с помощта на много удобната (и току-що открита от мен) функция UNHEX.
SELECT * FROM `mydata`
WHERE `words` REGEXP CONCAT('[',UNHEX('e3'),'-',UNHEX('e9'),']')
Току що го изпробвах. Работи като чар. :)