mysqldump и восстановление с помощью специальных символов. øæåØÆÅ - PullRequest
14 голосов
/ 27 августа 2010

Локально я делаю это, чтобы сбросить и переместить базу данных, обновив 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. Я схожу с ума от фрахтователей, а не от.

Кто-нибудь знает, где я ошибся?

Ответы [ 9 ]

18 голосов
/ 12 февраля 2011

Попробуйте запустить с помощью следующей команды:

mysqldump -u root -p database -r output.sql

вместо перенаправления вывода со стрелкой '>'

9 голосов
/ 22 сентября 2012

Мне потребовалось два дня, чтобы выяснить, что у меня возникла та же проблема, и решить ее при попытке экспортировать базу данных на арабском языке с помощью mysqldump, и каждый раз, когда вы открываете выходной файл в notepad ++, его кодировка находится в 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

3 голосов
/ 11 декабря 2013

У меня получается следующее :

mysql --default-character-set=utf8 -u ..

Пусть это вам поможет.

3 голосов
/ 04 декабря 2013

Это исправило проблему для меня.

  1. Импорт двойного кодированного ввода.sql

  2. Экспорт снова mysqldump -h "$DB_HOST -u "$DB_USER" -p"$DB_PASSWORD" --opt --quote-names --skip-set-charset --default-character-set=latin1 "$DB_NAME" > output.sql

  3. Импорт чистого вывода.sql

Как восстановить базу данных, дважды закодированную mysqldump

2 голосов
/ 21 апреля 2011

Очень важно убедиться, что клиент настроен на UTF8. Смущает, что это не то же самое, что установка вашей базы данных в UTF8. Откройте /etc/my.cnf и убедитесь, что у вас есть default-набор символов = utf8 в [mysql], а не в [mysqld]

Теперь вы должны иметь возможность направлять дампы UTF8 непосредственно в клиент mysql. Я также рекомендую использовать параметр --hex-blob в команде mysqldump, так как mysqldump не идеален.

1 голос
/ 06 марта 2019

Единственный способ, который мне помог, - экспортировать таблицы utf-8 как latin-1 (набор символов file: iso-8859-1) в phpmyadmin.

Открыть экспортированный файл в блокноте ++ конвертировать в UTF8 (с спецификацией)

Затем загрузите файл и импортируйте с помощью SOURCE dump.sql.

1 голос
/ 27 августа 2010

Возможно, просто скопируйте таблицы в $ newDatabase как latin1. Затем для каждой таблицы выполните:

ALTER TABLE table CONVERT TO CHARACTER SET utf8 COLLATE utf8_swedish_ci
1 голос
/ 27 августа 2010

Вы пробовали без шага iconv? 1002 *

Вот что я использую при выгрузке баз данных 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
0 голосов
/ 14 февраля 2019

Это сработало для меня:

  1. ssh сервер и подключение.
  2. Создать дамп базы данных

mysqldump -h my_guid.cloud.database.com -u my_user -p my_database_name -r ~/my_db_backup.sql

Консоль запросит пароль и там вы сможете ввести его, у моего pwd были специальные символы, поэтому я смог с легкостью выполнить эту команду

...