我正在尝试使用命令:
进行mysql转储mysqldump -u xxxx -p dbxxx > xxxx270613.sql
使用UTF8获取mysqldump的命令是什么?
答案 0 :(得分:8)
我遇到的问题是,即使在创建转储时使用了utf-8标志,我也无法避免坏字符导入使用latin1从具有许多文本列的数据库创建的转储。 进行一些谷歌搜索,尤其是this site帮助我终于弄清楚了。
mysqldump, 为避免MySQL尝试重新转换并设置字符集。
通过在终端上使用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
简介创建一个干净的数据库
创建数据库mydatabase字符集utf8mb4收集utf8mb4_0900_ai_ci;
应用固定转储
答案 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
或--databases
,mysqldump
在每个数据库的转储输出之前写入CREATE DATABASE
和USE
语句。这可确保在重新加载转储文件时,如果每个数据库不存在,它将创建每个数据库,并使其成为默认数据库,以便将数据库内容加载到它们所来自的同一数据库中。如果要在重新创建数据库之前使转储文件强制删除每个数据库,请同时使用--add-drop-database选项。在这种情况下,mysqldump
在每个DROP DATABASE
语句之前写入CREATE DATABASE
语句。
这有助于恢复使用:
# mysql < dump.sql
而不是:
# mysql dbname < dump.sql