У меня есть таблица с полем, которое содержит строки в моей базе данных MySQL.
Версия MySQL - 5.0.51a. Набор символов по умолчанию для таблицы - utf8.
Многие строки имеют символы Юникода, такие как \ xae и \ u21222 (зарегистрированный символ и символ товарного знака соответственно).
Например, предположим, у меня есть строка с полем это значение:
"Bing® Blang™ Blaow"
Набор символов по умолчанию для моего клиента командной строки mysql - "latin1".
Если я выполню оператор SELECT в клиентской программе mysql из командной строки без указания набора символов, вывод заголовка будет выглядеть следующим образом:
"Bing® Blang Blaow"
Символ (R) правильный, но символ (TM) отсутствует. Если я вырежу и вставлю эту строку из консоли в TextMate, появится символ (TM), но он будет на полпути от g в слове «Blang».
Я полагаю, что функция "наполовину позади" - это просто ошибка отображения в TextMate (хотя, если кто-то и может предоставить дополнительную информацию, это было бы здорово, но это не очень важная часть).
Главное, что я могу сделать вывод из поведения «там-после-после-вырезать-вставить», заключается в том, что данные находятся в базе данных, но что-то не так с каким-то набором символов где-то.
Если я переопределяю кодировку клиента mysql по умолчанию в командной строке, то вот так:
mysql --default-character-set=utf8
Затем сделайте тот же выбор, строка выглядит так:
"Bing® Blang™ Blaow"
, что означает, что оба символа (R) и (TM) появляются и находятся в нужном месте, но им предшествует символ Unicode \ xae, который представляет собой букву A с огибающей сверху.
(Кстати, это также, как данные отображаются, когда я вынимаю их с помощью python и отображаю их на веб-странице, что является моей реальной проблемой).
В любом случае, что здесь происходит? Все, что мы сделали в последнее время, использовало UTF8 везде, где только возможно, но возможно, что некоторые из этих строк были вставлены до этого изменения, что означает, что они использовали бы значение по умолчанию для latin1 ... однако ни одна из кодировок не дает правильного результата?
Если строки были вставлены, когда кодировка по умолчанию для таблицы была latin1, прежде чем она была переключена на utf8, то кодировка была переключена (через alter table ..), тогда будет ли кодировка фактически обновлена? Должна ли одна из кодировок работать сейчас? Юникод когда-нибудь перестанет пинать мою задницу?