如何使用UTF8的mysqldump?

时间:2018-03-20 08:36:13

标签: mysql

我正在尝试使用命令:

进行mysql转储
mysqldump -u xxxx -p dbxxx > xxxx270613.sql

使用UTF8获取mysqldump的命令是什么?

3 个答案:

答案 0 :(得分:8)

我遇到的问题是,即使在创建转储时使用了utf-8标志,我也无法避免坏字符导入使用latin1从具有许多文本列的数据库创建的转储。 进行一些谷歌搜索,尤其是this site帮助我终于弄清楚了。

    具有-skip-set-charset --default-character-set = latin1 标志的
  1. mysqldump, 为避免MySQL尝试重新转换并设置字符集。

  2. 通过在终端上使用sed替换字符集字符串来修复转储

    sed -i's / latin1_swedish_ci / utf8mb4 / g'mysqlfile.sql
    sed -i's / latin1 / utf8mb4 / g'mysqlfile.sql

为确保您不会错过任何内容,可以在步骤2之前执行grep -i'latin1'mysqlfile.sql-然后提出更多的sed命令。 sed here

简介
  1. 创建一个干净的数据库

    创建数据库mydatabase字符集utf8mb4收集utf8mb4_0900_ai_ci;

  2. 应用固定转储

答案 1 :(得分:7)

嗨,请尝试以下方法。

mysqldump -u [username] –p[password] --default-character-set=utf8 -N --routines --skip-triggers --databases [database_name] > [dump_file.sql]

答案 2 :(得分:5)

我喜欢使用这个选项转储:

mysqldump --events \
 --routines \
 --triggers \
 --add-drop-database \
 --compress \
 --hex-blob \
 --opt \
 --skip-comments \ 
 --single-transaction \
 --skip-set-charset \
 --default-character-set=utf8
 --databases dbname > my.dump

另外,检查--hex-blob它有助于以十六进制格式转储二进制字符串,因此我可以保证(更便携)使导入工作。

  

--databases选项会将命令行上的所有名称视为数据库名称。如果没有此选项,mysqldump会将名字视为数据库名称,将后续名称视为表名。

     

使用--all-databases--databasesmysqldump在每个数据库的转储输出之前写入CREATE DATABASEUSE语句。这可确保在重新加载转储文件时,如果每个数据库不存在,它将创建每个数据库,并使其成为默认数据库,以便将数据库内容加载到它们所来自的同一数据库中。如果要在重新创建数据库之前使转储文件强制删除每个数据库,请同时使用--add-drop-database选项。在这种情况下,mysqldump在每个DROP DATABASE语句之前写入CREATE DATABASE语句。

这有助于恢复使用:

# mysql < dump.sql

而不是:

# mysql dbname < dump.sql