LINUX.ORG.RU
ФорумAdmin

Кодировка в MySQL


0

2

Приветствую.

Имеется дамп базы MySQL. Там что-то типа такого: «VALUES (1,4,'По адреÑ<81>ам')».

При попытке конвертировать командой «| recode utf-8..iso-8859-1» получается «VALUES (1,4,'�„Yо ад�EURесам')“. Там написано „По адресам“.

Конвертация проходит, но не полностью.

Как бы мне переконвертировать это нормально, не подскажите?

★★

Ответ на: комментарий от Stage1

«VALUES (1,4,'По адре�iconv: illegal input sequence at position 117»

боюсь лучше уже не будет, дамп битый из-за некорректной выгрузки.

BaBL ★★★★★
()
Ответ на: комментарий от Skolotovich

iconv -с -f utf8 -t cp1252

А, и да, mysql по дефолту в latin1 лепит всё. Это то же самое, что и cp1252? Если нет, то, может, с latin1 будет лучше.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Можно попробовать игнорировать некорректные смиволы по //ignore или -c

ну инфу то это не восстановит. У него изначальные данные не 1 в 1 сдамплены, а поскольку не юникод, то символы уже потеряны.

максимум - натравить анализ со словарем для восстановления, как после OCR, к примеру. Самые узнаваемые и малоповрежденные слова можно пофиксить.

BaBL ★★★★★
()
Ответ на: комментарий от BaBL

ну инфу то это не восстановит

Просто мысль была, вдруг, часть символов не показывается просто из-за несовпадения latin1 и cp1252. Но попробовал кусок текста из топикстарта, похоже, что это именно cp1252 и что оно от latin1 реально отличается:

balancer@z9:~/Dropbox/Linux/Server$ echo "VALUES (1,4,'По адреÑ<81>ам')" | iconv -c -t latin1
VALUES (1,4,'�о ад�е�<81>ам')
balancer@z9:~/Dropbox/Linux/Server$ 
balancer@z9:~/Dropbox/Linux/Server$ echo "VALUES (1,4,'По адреÑ<81>ам')" | iconv -c -t cp1252
VALUES (1,4,'По адре�<81>ам')

Впрочем, с другой стороны:

$ echo 'По адресам' | iconv -t cp1251 | iconv -f latin1 | iconv -t cp1252 | iconv -f cp1251
По адресам

А так — совпадает :)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

А так — совпадает :)

не совсем совпадает, к примеру ты не можешь cp1251 в cp1252 напрямую перегнать

$ echo 'По адресам' | iconv -f utf-8 -t cp1251 | iconv -f cp1251 -t cp1252
iconv: недопустимая входная последовательность в позиции 0

т.е. соответствие между latin1 и cp1251 - очень близкое, но не однозначное и где-то частично может теряться.

BaBL ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.