本地我这样做是为了转储和移动数据库,将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。我得到了疯狂的√Π租船人而不是øæåØÆå。
谁知道我哪里出错了?
尝试使用以下命令运行:
mysqldump -u root -p database -r output.sql
而不是使用箭头'>'重定向输出
我花了两天时间才发现我遇到了同样的问题并在尝试使用mysqldump导出阿拉伯语数据库时解决了这个问题,每次在notepad ++中打开输出文件时,其编码都在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
这为我解决了这个问题。
mysqldump -h "$DB_HOST -u "$DB_USER" -p"$DB_PASSWORD" --opt --quote-names --skip-set-charset --default-character-set=latin1 "$DB_NAME" > output.sql
确保客户端设置为UTF8非常重要。令人困惑的是,它与将数据库设置为UTF8不同。打开/etc/my.cnf并确保[mysql]下的default-character-set = utf8不仅仅在[mysqld]下
现在您应该能够将UTF8转储直接传递到mysql客户端。我还建议在mysqldump命令上使用选项--hex-blob,因为mysqldump并不完美。
我成功如下:
mysql --default-character-set=utf8 -u ..
愿这对你有所帮助。
你没有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
也许只需将表复制到$ newDatabase作为latin1。然后,对于每个表,执行:
ALTER TABLE table CONVERT TO CHARACTER SET utf8 COLLATE utf8_swedish_ci
唯一对我有用的方法是在phpmyadmin中将utf-8表导出为latin-1(文件的字符集:iso-8859-1)。
在notepad ++中打开导出的文件转换为UTF8(带BOM)
然后使用SOURCE dump.sql上传文件并导入。
这对我有用:
mysqldump -h my_guid.cloud.database.com -u my_user -p my_database_name -r ~/my_db_backup.sql
控制台会提示并询问密码,你可以在那里打字,我的pwd有特殊字符,所以我能够轻松地运行这个命令