我有一个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查询?
答案 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
希望这有帮助!