Mysqldump и восстановление со специальными символами. øæåØÆÅ
Локально я делаю это, чтобы сбрасывать и перемещать базу данных, обновляя silverstripe 2.3 до 2.4:
mysqldump --opt --default-character-set=latin1 --skip-set-charset --user=$root -p$password $oldDatabase -r db.sql
iconv -f LATIN1 -t UTF8 db.sql > db_utf.sql
CREATE DATABASE $newDatabase CHARACTER SET utf8 COLLATE utf8_swedish_ci; FLUSH PRIVILEGES; GRANT ALL PRIVILEGES ON $newDatabase . * TO '$newUser'@'localhost'; FLUSH PRIVILEGES;
SET NAMES utf8; SOURCE db_utf.sql;
И это работает, но на сервере Ubuntu 8.04, с mysql Ver 14.12 Distrib 5.0.51a.
Я получаю сумасшедшие фрахтователи √Π вместо øæåØÆå.
Кто-нибудь знает, где я ошибся?
Ответы
Ответ 1
Это решило проблему для меня.
-
Импортируйте двойной кодированный вход .sql
-
Экспортируйте его снова mysqldump -h "$DB_HOST -u "$DB_USER" -p"$DB_PASSWORD" --opt --quote-names --skip-set-charset --default-character-set=latin1 "$DB_NAME" > output.sql
-
Импортировать чистый output.sql
Как восстановить базу данных, закодированную mysqldump
Ответ 2
Попробуйте выполнить следующую команду:
mysqldump -u root -p database -r output.sql
вместо перенаправления вывода со стрелкой ' > '
Ответ 3
Мне потребовалось два дня, чтобы узнать
У меня была такая же проблема и она была решена при попытке экспорта базы данных на арабском языке с помощью mysqldump
и каждый раз, когда вы открываете выходной файл в блокноте ++, его кодировка находится в ansi, и вам нужно, чтобы он был utf-8, мой код для экспорта и импорта был следующим, как оказалось, я был прав, но я проверял базу данных на терминале, но терминал не поддерживает кодирование, и я просто попытался проверить его с помощью phpmyadmin, и его хорошо не пытаться открыть файл в блокноте ++
или просто попробуйте приложение напрямую, оно будет работать.
команда экспорта
mysqldump -uuser -ppassword --default-character-set=utf8 dbname > outputfile //or even if you use -r instead of > no difference
команда импорта
mysql -uuser -ppassword --default-character-set=utf8 dbname < outputfille // please take in mind this does override existing database
Ответ 4
Я попробовал разные решения здесь без везения. Затем я попробовал вариант 2 в этом блоге: http://www.orthogonalthought.com/blog/index.php/2007/05/mysql-database-migration-and-special-characters/, и он решил проблему. По-видимому, ошибка в mysqldump является причиной проблемы.
Ответ 5
Я преуспеваю следующим образом:
mysql --default-character-set=utf8 -u ..
Пусть это поможет вам.
Ответ 6
Возможно, просто скопируйте таблицы в $newDatabase как latin1.
Затем для каждой таблицы выполните:
ALTER TABLE table CONVERT TO CHARACTER SET utf8 COLLATE utf8_swedish_ci
Ответ 7
Очень важно убедиться, что клиент настроен на UTF8. Смутно, это не то же самое, что настройка базы данных на UTF8. Откройте /etc/my.cnf и убедитесь, что у вас установлен default-character-set = utf8 в [mysql] не только под [mysqld]
Теперь вы должны иметь возможность отправлять дампы UTF8 непосредственно в клиент mysql. Я также рекомендую использовать параметр -hex-blob в команде mysqldump, поскольку mysqldump не идеален.
Ответ 8
Вы пробовали это без шага iconv
?
Вот что я использую при сбрасывании баз данных UTF-8:
mysqldump \
-u $DB_USER -p"$DB_PASS" \
--default-character-set=Latin1 \
--result-file=$DATAFILE
А для восстановления:
mysql -u $DB_USER -p"$DB_PASS" \
--default-character-set=latin1 < $DATAFILE