Ответ 1
mysql> SELECT HEX(name) FROM mytable;
+-----------+
| hex(name) |
+-----------+
| 4142C2A0 |
+-----------+
У меня есть таблица 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-запросом?
mysql> SELECT HEX(name) FROM mytable;
+-----------+
| hex(name) |
+-----------+
| 4142C2A0 |
+-----------+
Почему бы не попробовать оператор BINARY?
"Оператор BINARY отправляет строку, следующую за ней, в двоичную строку. Это простой способ принудительно выполнить сравнение столбцов байтом по байту, а не символом по символу."
http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html
Надеюсь, это поможет!
Вы можете попробовать использовать функцию HEX() [http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_hex]. Из документации SELECT HEX('abc');
возвращает 616263
.