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

MySQLで漢字を検出する方法は?

    SELECT COUNT(*)
        FROM tbl
        WHERE HEX(col) REGEXP '^(..)*(E[2-9F]|F0A)'
    

    colに漢字が含まれるレコードの数をカウントします 。

    問題:

    • 16進数のどの範囲が中国語を表すかわかりません。
    • テストは可能性があります 韓国語と日本語を含みます。 ("CJK")
    • MySQLでは、4バイトの漢字にはutf8mb4が必要です。 utf8の代わりに 。

    詳細

    表の列はCHARACTER SET utf8であると想定しています。 。 utf8エンコーディングでは、漢字は16進数のE2とE9、またはEF、またはF0の間のバイトで始まります。 16進数のEで始まるものは3バイトの長さになりますが、長さはチェックしていません。 F0のものは4バイトになります。

    正規表現は^(..)*で始まります 、「文字列の先頭から(^ )、0個以上を検索します(* )2文字(.. )値。その後はEのいずれかになります -何かまたはF0A 。その後、何でも起こり得ます。 E-何かは、より具体的には、E その後に2、3、4、5、6、7、8、9、またはFのいずれかが続きます。

    ランダムに選んだ 3つの16進バイトとしてエンコードE88D89 、および𠜎 4つの16進バイトとしてエンコードしますF0A09C8E

    特定の言語の文字列をチェックするためのより良い方法がわかりません。

    お気づきのとおり、REGEXPはかなり遅くなる可能性があります。

    この正規表現は、一部の非漢字がキャプチャされる可能性があるという点で、やり過ぎになる可能性があります。




    1. RACでのSYSパスワードの変更

    2. CSVファイルをMySQLテーブルにインポートするにはどうすればよいですか?

    3. ストアドプロシージャのSqlParameterでDateTimeを使用すると、フォーマットエラーが発生します

    4. mysqlのダミーデータをテーブルに自動的に入力します