MySQL は、一連の文字を 16 進数表現に変換する関数 HEX() を使用します。唯一の問題は、各文字が 2 バイトであると想定していることです。ほとんどの場合はこれで問題ありませんが、utf-8 では 2 バイトを超える文字が存在することがあります。
例えば。0xEFBFBD は、エンコード エラーを通知するために使用される 3 バイト文字です。DB (合計 6 バイト) の utf8 でエンコードされたテーブルにこれらの文字を 2 つ続けて配置し、SELECT HEX(col1) FROM テーブル ... を実行すると、0xEFBFBD ではなく 0xC3AFC2BFC2BD として出力されます。PHPでクエリを使用して選択し、PHP内で16進数に変換すると、正しい形式になります。
最適なのは、関数が適切なマルチバイト UTF8 をデコードできる MySql であることです。存在しないように見えることに非常に驚いています。他の誰かがこれに該当することを発見したかどうか、および可能な回避策があるかどうかを知りたいです。
MySql の回答に最も近いものは次のとおりです。 http://forums.mysql.com/read.php?103,375304,375660
しかし、このアドバイスは実際には役に立ちません。誰も頭から離れたアイデアがない場合は、後でテストケースを投稿します。