Как декодировать неправильно закодированные данные в MySQL - PullRequest
0 голосов
/ 21 февраля 2011

У меня есть таблица MySQL с сопоставлением "latin1_swedish_ci".Таблица используется для хранения строк на нескольких языках (русский, английский, латышский).В результате строки, хранящиеся в таблице, неправильно закодированы.Например: Двери хранится как Двери

Я часами пытался найти кодировку, которая позволила бы мне правильно хранить строки в новой таблице с сопоставлением «utf8_general_ci».

Iиспользовал python, чтобы угадать декодирование для неправильных строк.Я пробежал десятки различных кодировок, и самое близкое, что я получил, было
print "Двери".decode("latin1")
, дающее мне ÐвеÑи, что близко, но не совсем Двери

Мне было интересно, есть ли какие-товариации в кодировке latin1, что даст мне правильную кодировку?И я был бы очень признателен, если бы кто-нибудь предложил способ решения подобных проблем в целом?
Спасибо.

Ответы [ 2 ]

1 голос
/ 21 февраля 2011

Если кодировка, используемая в сохраненных данных, не соответствует кодировке, определенной для столбца, вы можете сначала переключиться на двоичный тип, а затем вернуться к текстовому типу с соответствующим набором символов.Например, после резервного копирования базы данных,

ALTER TABLE table MODIFY col varbinary(...);
ALTER TABLE table MODIFY col varchar(...) CHARACTER SET utf8;

Убедитесь, что ваш клиент также использует UTF8 для подключения к серверу, (например, выполнив команду SET CHARACTER SET utf8.

См. Также:

0 голосов
/ 21 февраля 2011

Это очень похоже, но все же отличается CP1252 .

>>> print u'Двери'.encode('cp1252').decode('utf8')
Двери
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...