理論的にはこれを行うことができます:
- テストするUnicode範囲を見つけます。
- 開始と終了を手動でUTF-8にエンコードします。
- エンコードされた開始と終了のそれぞれの最初のバイトをREGEXPの範囲として使用します。
CJKの範囲は、ユーロ記号のようなものから十分に離れているため、誤検知と誤検知はほとんどないか、まったくないと思います。
編集: これで理論が実践されました!
ステップ1: 文字範囲を選択します。私は\u3000-\u9fffを提案します;テストが簡単で、ほぼ完璧な結果が得られるはずです。
ステップ2: バイトにエンコードします。 (Wikipedia utf-8ページ)
選択した範囲では、utf-8でエンコードされた値は常に3バイトになり、最初の値は1110xxxxです。ここで、xxxxはUnicode値の最上位4ビットです。
したがって、11100011から11101001、または0xe3から0xe9の範囲のバイトをマッハします。
ステップ3: 非常に便利な(そして今私が発見した)UNHEX関数を使用して正規表現を作成します。
SELECT * FROM `mydata`
WHERE `words` REGEXP CONCAT('[',UNHEX('e3'),'-',UNHEX('e9'),']')
試してみました。チャームのように機能します。 :)