sql >> データベース >  >> RDS >> Mysql

MySQLでアジア言語の文字を含むテキストをクエリするにはどうすればよいですか?

    理論的にはこれを行うことができます:

    1. テストするUnicode範囲を見つけます。
    2. 開始と終了を手動でUTF-8にエンコードします。
    3. エンコードされた開始と終了のそれぞれの最初のバイトを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'),']')
    

    試してみました。チャームのように機能します。 :)



    1. 集合体データテーブル

    2. SQL Server 2016:クエリ結果をCSVファイルに保存

    3. 2つの異なるテーブルの列sqlite3に結合します

    4. MySQL IS NOT NULLと!=''の違い