mysqldump并使用特殊字符进行恢复。 øæåØÆÅ

时间:2010-08-27 11:29:03

标签: mysql mysqldump silverstripe

本地我这样做是为了转储和移动数据库,将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 个答案:

答案 0 :(得分:18)

尝试使用以下命令运行:

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

而不是使用箭头'>'

重定向输出

答案 1 :(得分:9)

我花了两天时间才发现 当我尝试使用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

答案 2 :(得分:3)

这解决了我的问题。

  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. 导入clean output.sql

  4. How to restore the database double encoded by mysqldump

答案 3 :(得分:3)

我成功如下

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

愿这对你有所帮助。

答案 4 :(得分:2)

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

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

答案 5 :(得分: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

答案 6 :(得分:1)

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

ALTER TABLE table CONVERT TO CHARACTER SET utf8 COLLATE utf8_swedish_ci

答案 7 :(得分:1)

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

在记事本++中打开导出的文件 转换为UTF8(含BOM)

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

答案 8 :(得分:0)

这对我有用:

  1. shsh服务器并连接。
  2. 创建正在运行的数据库转储

@newOrder+1

控制台将提示您输入密码,您可以在其中输入密码,我的密码有特殊字符,因此我能够轻松地运行此命令