Как я могу увидеть сырые байты, хранящиеся в столбце MySQL?

У меня есть таблица MySQL, правильно настроенная для набора символов UTF-8. Я подозреваю, что некоторые данные, вставленные в один из моих столбцов, были дважды закодированы. Я ожидаю увидеть неразрывный пробел (UTF-8 0xC2A0), но то, что я получаю при выборе этого столбца из этой таблицы, составляет четыре октета (0xC3A2 0xC2A0). Это то, что я ожидал бы увидеть, если в какой-то момент кто-то обработал UTF-8 0xC2A0 в качестве ISO-8859-1, затем попытался снова закодировать UTF-8 перед вставкой в ​​MySQL.

Мой тест выше, где я вижу четыре октета, включает выбор этого столбца из MySQL с помощью Perl DBD:: mysql. Я хотел бы взять Perl и DBD:: mysql из уравнения, чтобы убедиться, что эти четыре октета на самом деле хранятся в MySQL. Есть ли способ сделать это непосредственно с SQL-запросом?

Ответы

Ответ 1

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

Ответ 2

Почему бы не попробовать оператор BINARY?

"Оператор BINARY отправляет строку, следующую за ней, в двоичную строку. Это простой способ принудительно выполнить сравнение столбцов байтом по байту, а не символом по символу."

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

Надеюсь, это поможет!