Я пытаюсь импортировать большой файл SQL; создается mysqldump на одном сервере, затем конвертируется с помощью iconv; используя эти команды:
$ mysqldump -uxxx -p xxx > data.sql
$ iconv -f UTF-8 -t ISO-8859-1//TRANSLIT data.sql data.iconv.sql
Я заметил, что "\ x91" в базе данных превратился в "\ xc3 \ x82 \ xc2 \ x91" в дампе, потому что mysqldump пытается преобразовать все в utf-8. Я преобразовал его обратно в "\ x91" с помощью iconv. Если я их не конвертирую, на новом сервере они окажутся "\ xc2 \ x3f"; вместо просто "\ x3f", как сейчас.
Итак, как читалось ранее, есть некоторые символы, уникальные для кодировки cp1252, например «\ x91» и «\ x92». Оба этих символа превратились в "\ x3f" в новой базе данных; это команда, которую я использую для импорта:
$ /opt/mysql5/bin/mysql -uxxx -p -Dxxx < data.iconv.sql
Кто-нибудь знает, как это могло случиться и что делать, чтобы этого не произошло? Зная это, я смогу перенести данные в том виде, в котором они были.
Дополнительная информация:
Я использовал этот источник для iconv-things. Как видите, на этой странице еще один человек имел проблемы с cp1252; может в этом причина.
Версии сервера:
старый хост: Ver 10.10 Distrib 5.0.18, для pc-linux-gnu (i486) новый хост: Ver 10.11 Distrib 5.0.51, для pc-linux-gnu (i686)






Если ваши данные cp1252, почему вы сообщаете iconv его utf-8?
Я до сих пор не нашел рабочего решения; мы собираемся попробовать выполнить миграцию с помощью сценария, который устанавливает 2 соединения и просто выбирает одно соединение и обновляет другое ...
Пытаться:-
iconv -f IBM-1252 -t ISO-8859-1
Не знаю, почему мой предыдущий ответ был помечен. utf-8 - это не ASCII! Все 7-битные символы UTF идентичны 7-битному набору символов ASCI, но первый бит b'1000000 имеет особое значение в UTF-8 и указывает, что этот символ является двух- трех- или четырехбайтовым символом Unicode.
это не форум. если у вас есть дополнительные мысли, отредактируйте свой первый ответ
Если mysql конвертируется в utf-8, вам нужно:
iconv -f utf-8 -t IBM-1252 xxxx
Это должно преобразовать открытую кавычку обратно в x "91". «Xc291» на самом деле является utf-8 для открытой цитаты.
Какую версию mysqldump вы используете?
Последняя версия 5 выпускает дамп таблицы переноса с командами, которые устанавливают набор символов, например:
SET @saved_cs_client = @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE ...
...
...
SET character_set_client = @saved_cs_client;
Может ли их наличие / отсутствие повлиять на ваш импорт?
Ответил на ваш вопрос в основном посте!
В моей системе mysqld по умолчанию сохраняет данные на latin1 со шведской сортировкой. Точно так же клиент командной строки mysql по умолчанию предоставляет данные на latin1. mysqldump, с другой стороны, по умолчанию использует utf-8.
Это вызывает проблемы при экспорте данных через mysqldump и последующем импорте с использованием клиента командной строки mysql - символы, которые не являются общими для двух наборов символов, изменяются.
Решение состоит в том, чтобы заставить mysqldump украшать данные дополнительными командами, которые будут правильно устанавливать набор символов клиентов mysql:
mysqldump --set-charset ...
Это по умолчанию добавит "set name = utf-8" в выгружаемые данные. Теперь это может быть чисто импортировано клиентом mysql.
Дополнительную опцию «--default-character-set=xxx» можно использовать с mysqldump для преобразования дампа в нечто отличное от utf-8.
Использование опции -set-charset должно избавить вас от необходимости вообще использовать iconv.
Упомянул об этом в вопросе об оригиналах; Если я этого не сделаю, mysqldump сгенерирует \ xc2 \ x91 вместо \ x91. Думаю, я читал на той же странице, что и это решение, что mysqldump пытается все преобразовать в utf-8. В этом случае ошибочно