2009-12-10 3 views
14

MySQLテーブルがUTF-8文字セットに正しく設定されています。私のカラムの1つに挿入されたいくつかのデータが二重にエンコードされていると思われます。私は改行しないスペース文字(UTF-8 0xC2A0)を見ることを期待していますが、このテーブルからこの列を選択すると4オクテット(0xC3A2 0xC2A0)が得られます。これは、ある時点で、誰かがISO-8859-1としてUTF-8 0xC2A0を扱ってから、MySQLに挿入する前にUTF-8に再度エンコードしようとしたときに、私が期待するものです。MySQLの列に生のバイトが格納されているのを確認するにはどうすればよいですか?

私が4オクテットを見ている私のテストでは、PerlのDBD :: mysqlを使ってMySQLからこの列を選択します。これらの4つのオクテットが実際にMySQLが格納しているものであることを検証するために、PerlとDBD :: mysqlを方程式から取り除きたいと思います。 SQLクエリを直接これを行う方法はありますか?

+0

HEXはそれをやった、と私はテーブル内のダブルエンコーディングについて正しかったように見えます。私はエンコーディングの問題に対処するために上流のシステムを見る必要があります。 –

+0

Ryan!どのようにあなたはこの推測を正しく行うことができるUTF8について多くのことを知っていますか? – portforwardpodcast

答えて

19
mysql> SELECT HEX(name) FROM mytable; 
+-----------+ 
| hex(name) | 
+-----------+ 
| 4142C2A0 | 
+-----------+ 
3

なぜBINARY演算子を試してみませんか?

「BINARY演算子は、バイナリ文字列に次の文字列をキャストします。これは、バイトではなく文字単位でのバイトを行うべき列の比較を強制する簡単な方法です。」

http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html

は、この情報がお役に立てば幸い!

関連する問題