【问题标题】:How take mysqldump with UTF8?如何使用 UTF8 获取 mysqldump?
【发布时间】:2018-08-28 23:47:32
【问题描述】:

我正在尝试使用命令进行 mysql 转储:

mysqldump -u xxxx -p dbxxx > xxxx270613.sql

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

【问题讨论】:

  • “使用 UTF8 获取 mysqldump”是什么意思?有什么问题?
  • 你在寻找类似makandracards.com/makandra/…的东西吗?
  • @NicoHaase 我在导入 sql 文件时遇到了问题。其他字符集有一些限制。所以UTF8有标准,它修复了很多mysql导入问题。

标签: mysql


【解决方案1】:

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

  1. 带有 --skip-set-charset --default-character-set=latin1 标志的 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. 创建一个干净的数据库

    CREATE DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;

  2. 应用固定转储

【讨论】:

  • 谢谢你!它解决了我的问题。
  • 哇,令人难以置信的答案,赞成!难以置信,设置default-character-set=utf8居然会导致utf-8损坏,谢谢!
【解决方案2】:

--default-character-set=utf8 是您正在寻找的选项,可以与其他选项一起使用:

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 在每个 CREATE DATABASE 语句之前写入一个 DROP DATABASE 语句。

这有助于恢复使用:

# mysql < dump.sql

代替:

# mysql dbname < dump.sql 

【讨论】:

  • 永远不要使用utf8;截至 2021 年,请使用不少于 utf8mb4
【解决方案3】:

您好,请尝试以下操作。

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

【讨论】:

  • 永远不要使用utf8;截至 2021 年,使用不少于 utf8mb4
  • @John 为什么?你能解释一下吗?
  • @RaulChiarella 您需要使用utf8mb4,而不是utf,否则很多 UTF 字符会被损坏。示例:HTTP GET 请求SET CHARACTER SET 'utf8mb4'HTTP POST 请求SET NAMES 'utf8mb4'
  • 谢谢。从现在开始我将使用 utf8mb4。
猜你喜欢
  • 2017-09-28
  • 1970-01-01
  • 2021-04-22
  • 1970-01-01
  • 2020-04-08
  • 1970-01-01
  • 2011-01-18
  • 1970-01-01
  • 2019-10-09
相关资源
最近更新 更多