MySQL の Latin1 でエンコードされた列の UTF-8 文字の検出
問題:
データベース内の Latin1 でエンコードされた列に UTF-8 文字が含まれているかどうかを変換する前に確認したい
オプション 1: MySQL ダンプと Perl 検索
このオプションでは、MySQL ダンプを使用してテキスト ファイルを作成し、次に Perl を使用して検索します。 UTF-8 文字の場合。ただし、大規模なデータセットの場合、この方法は時間がかかり、非効率的になる可能性があります。
オプション 2: MySQL CHAR_LENGTH 比較
このオプションは、MySQL CHAR_LENGTH 関数を使用して、次の行を検索します。マルチバイト文字。UTF-8 文字の存在を示す場合があります。ただし、一部の Latin1 アクセント文字もマルチバイトであるため、これでは十分ではない可能性があります。
推奨される解決策:
より包括的なアプローチは、次のクエリを使用することです。
SELECT CONVERT(CONVERT(name USING BINARY) USING latin1) AS latin1, CONVERT(CONVERT(name USING BINARY) USING utf8) AS utf8 FROM users WHERE CONVERT(name USING BINARY) RLIKE CONCAT('[', UNHEX('80'), '-', UNHEX('FF'), ']')
このクエリは、Latin1 アクセント付き文字またはUTF-8 マルチバイト文字。 Latin1 エンコーディングと UTF-8 エンコーディングの両方を使用して名前のバイナリ表現を変換すると、結果を視覚的に比較し、UTF-8 文字の存在を示す相違点があるかどうかを判断できます。
以上がLatin1 でエンコードされた MySQL 列内の UTF-8 文字を検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。