如何查看存储在MySQL列中的原始字节?

时间:2009-12-10 15:37:10

标签: mysql perl encoding

我有一个MySQL表正确设置为UTF-8字符集。我怀疑插入到我的一个列中的一些数据已被双重编码。我期待看到一个不间断的空格字符(UTF-8 0xC2A0),但是从该表中选择此列时我得到的是四个八位字节(0xC3A2 0xC2A0)。这就是我期望看到的,如果在某些时候有人将UTF-8 0xC2A0视为ISO-8859-1,则在插入MySQL之前尝试再次编码为UTF-8。

我在上面看到四个八位字节的测试涉及用Perl的DBD :: mysql从MySQL中选择这个列。我想将Perl和DBD :: mysql排除在等式之外,以验证这四个八位字节实际上是MySQL存储的内容。有没有办法直接使用SQL查询?

3 个答案:

答案 0 :(得分:25)

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

答案 1 :(得分:4)

您可以尝试使用HEX()函数[http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_hex]。在文档中,SELECT HEX('abc');会返回616263

答案 2 :(得分:3)

为什么不试试BINARY运算符?

“BINARY运算符将其后面的字符串转换为二进制字符串。这是一种简单的方法,可以逐字节而不是逐字符地强制进行列比较。”

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

希望这有帮助!