18

在本地,我这样做是为了转储和移动数据库,将 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。我疯了 √∏ 租船人而不是 øæåØÆå。

有谁知道我哪里出错了?

4

9 回答 9

24

尝试使用以下命令运行:

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

而不是用箭头“>”重定向输出

于 2011-02-12T19:14:14.450 回答
16

我花了两天时间才发现我遇到了同样的问题并在尝试使用 mysqldump 以阿拉伯语导出数据库时解决了它,每次你在记事本 ++ 中打开输出文件时,它的编码都是 ansi 并且你需要它是 utf-8 my导出和导入的代码如下事实证明我是对的,但我正在检查终端上的数据库,但终端不支持编码,我只是尝试用 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

于 2012-09-22T09:40:42.330 回答
6

这为我解决了这个问题。

  1. 导入双重编码的 input.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. 导入干净的 output.sql

如何恢复mysqldump双重编码的数据库

于 2013-12-04T12:06:52.920 回答
5

确保客户端设置为 UTF8 非常重要。令人困惑的是,它与将数据库设置为 UTF8 不同。打开 /etc/my.cnf 并确保在 [mysql] 下有 default-character-set = utf8 而不仅仅是在 [mysqld] 下

现在您应该能够将 UTF8 转储直接通过管道传输到 mysql 客户端。我还建议在 mysqldump 命令上使用 --hex-blob 选项,因为 mysqldump 并不完美。

于 2011-04-21T10:30:27.127 回答
4

我成功如下

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

愿这对你有所帮助。

于 2013-12-11T06:53:07.613 回答
1

你试过没有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
于 2010-08-27T11:43:19.723 回答
1

也许只是将表复制到 $newDatabase 作为 latin1。然后,对于每个表,执行:

ALTER TABLE table CONVERT TO CHARACTER SET utf8 COLLATE utf8_swedish_ci
于 2010-08-27T12:25:15.493 回答
1

这对我有用:

  1. SSH服务器并连接。
  2. 创建数据库转储运行

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

控制台将提示并询问密码,您可以在那里输入密码,我的密码有特殊字符,所以我能够轻松运行此命令

于 2019-02-14T15:55:26.770 回答
1

对我有用的唯一方法是在 phpmyadmin 中将 utf-8 表导出为 latin-1(文件字符集:iso-8859-1)。

在notepad++中打开导出的文件转换为UTF8(带BOM)

然后上传文件并使用 SOURCE dump.sql 导入。

于 2019-03-06T16:02:44.637 回答