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

Ответ 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