Windows 服务器中使用 mysqldump 命令导出数据,解决中文乱码问题
起因
环境:阿里云服务器(windows server)、mysql(8.0.11)
mysql> select @@version;
+-----------+
| @@version |
+-----------+
| 8.0.11 |
+-----------+
1 row in set
- 在windows服务器中每天备份一次数据库数据,防止出现各种意外。这里就使用了mysql的 mysqldump 服务来导出备份,备份初始脚本如下
@echo off
set hour=%time:~0,2%
if "%time:~0,1%"==" " set hour=0%time:~1,1%
set now=%Date:~0,4%%Date:~5,2%%Date:~8,2%%hour%%Time:~3,2%%Time:~6,2%
echo %now%
set host=127.0.0.1
set port=3306
set user=root
set pass=马赛克
# 要备份的数据库,这里我项目的数据库是 xxx_project
set dbname=xxx_project
# 备份文件所在的位置,这里我固定放在 C:\MysqlDataBackups\ 下面,%dbname%-%now%.sql 是要生成的文件名称
set backupfile=C:\MysqlDataBackups\%dbname%-%now%.sql
# 运行备份命令 C:\mysql-8.0.11-winx64\bin\mysqldump 是我 mysql 安装目录下 mysqldump 所在的位置
"C:\mysql-8.0.11-winx64\bin\mysqldump" -h%host% -P%port% -u%user% -p%pass% -c --add-drop-table %dbname% > %backupfile%
echo delete files before 10 days
forfiles /p E:\MysqlDataBackups /s /m *.sql /d -60 /c "cmd /c del @file /f"
@echo on
命令保存为 bat 文件,双击执行,能成功在 C:\MysqlDataBackups\ 下面生成一个文件

但是,当我们打开文件看的时候,发现里面的备注,中文相关的都是乱码(PS:Notepad++ 软件打开不会,可能是因为这个软件比较智能)

解决办法
检查编码
- 这里为了防止我们数据库编码不对,我们先用命令查看数据库编码,这里可以看到编码都是正常的, 主要字段是 character_set_results 的编码
mysql> show variables like '%char%';
+--------------------------+----------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | C:\mysql-8.0.11-winx64\share\charsets\ |
+--------------------------+----------------------------------------+
8 rows in set
上面几个变量说明:
- character_set_client: 设置客户端使用的字符集。
- character_set_connection: 连接数据库的字符集设置类型,如果程序没有指明连接数据库使用的字符集类型则按照服务器端默认的字符集设置。
- character_set_database: 设置数据库服务器中某个库的字符集。
- character_set_filesystem: 设置文件系统的字符集。
- character_set_results: 设置服务端返回给客户端结果显示使用的字符集。
- character_set_server: 设置服务器安装时指定的默认字符集。
- character_set_system: 设置数据库系统使用的字符集。
如果上面编码不对的话,想快速设置的话执行:set character_set_results = utf8;
上面这个只在当前终端有效,如果想永久保存的话还是需要修改
my.ini的配置文件。
解决方案一(不适用)
- 网上很多说法是 Windows PowerShell 输出重定向 (“>”) 文件编码默认为UTF-16(LE)问题,解决办法都是把命令拿去 cmd 中执行 ,但是我们这里是写成脚本了,在cmd中执行是手动执行,虽然不是乱码,但是我们放在脚本中执行就出现乱码了,这个办法显然对于我来说是不可行的。
mysqldump -uroot -p --add-drop-table xxx_project > D:\xxx.sql
解决方案二(不可行)
- 还有的文章说在导出的命令上加上各种编码参数,如:--default-character-set=utf8
mysqldump -uroot -proot --add-drop-table --default-character-set=utf8 xxx_project > D:\xxx.sql
- 在网上发现另一个参数
--hex-blob, 这个参数主要是为了把BINARY,VARBINARY,BLOB,BIT等类型导出为十六进制,因为这些类型比较容易乱码。再次尝试:
mysqldump -uroot -proot --add-drop-table --default-character-set=utf8 --hex-blob xxx_project > D:\xxx.sql
打开文件后依然乱码
最终方案
- 最后在MySQL官网找到一段 mysqldump 相关的说明,在这段代码中找到了解决方案(https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html)

- 这段话翻译过来就是:
说明:
在Windows上使用带有输出重定向的PowerShell生成的转储文件将创建一个具有UTF-16编码的文件:
mysqldump [options] > dump.sql
但是,UTF-16不允许作为连接字符集(请参阅不允许的客户端字符集),因此无法正确加载转储文件。要解决这个问题,使用——result-file选项,它会创建ASCII格式的输出:
mysqldump [options] --result-file=dump.sql
- 最后执行的命令 --result-file 不会创建文件。所以我们要提前创建 xxx.sql 文件,每次执行都会清空 xxx.sql 里面的文件内容,然后重新写入数据到文件中
mysqldump -uroot -proot --add-drop-table --default-character-set=utf8 --hex-blob xxx_project --result-file=C:\MysqlDataBackups\xxx.sql
- 解决办法找到了,但是光是这样执行,还达不到我们备份的目的,于是结合脚本,最终修改为:
@echo off
set hour=%time:~0,2%
if "%time:~0,1%"==" " set hour=0%time:~1,1%
set now=%Date:~0,4%%Date:~5,2%%Date:~8,2%%hour%%Time:~3,2%%Time:~6,2%
echo %now%
set host=127.0.0.1
set port=3306
set user=root
set pass=马赛克
# 要备份的数据库,这里我项目的数据库是 xxx_project
set dbname=xxx_project
# 备份文件所在的位置,这里我固定放在 C:\MysqlDataBackups\ 下面,%dbname%-%now%.sql 是要生成的文件名称
set backupfile=C:\MysqlDataBackups\%dbname%-%now%.sql
#用 bat 命令先创建文件 backupfile,然后在用 mysqldump 往这个文件中 写入数据
echo=>%backupfile%
"C:\mysql-8.0.11-winx64\bin\mysqldump" -h%host% -P%port% -u%user% -p%pass% --default-character-set=utf8 --hex-blob -c --add-drop-table %dbname% --result-file=%backupfile%
echo delete files before 10 days
forfiles /p E:\MysqlDataBackups /s /m *.sql /d -60 /c "cmd /c del @file /f"
@echo on
- 最后看看效果

- 最后我们用 windows 的定时任务在每天凌晨三点的时候执行这个 bat 脚本,就能做到一天备份一次数据库拉。

Windows 服务器中使用 mysqldump 命令导出数据,解决中文乱码问题的更多相关文章
- spingboot项目在windows环境中运行时接收参数及日志中文乱码
1.logback.xml配置 appender中添加 <param name="Encoding" value="UTF-8" /> <co ...
- 【C#】C#中使用GDAL3(二):Windows下读写Shape文件及超详细解决中文乱码问题
转载请注明原文地址:https://www.cnblogs.com/litou/p/15035790.html 本文为<C#中使用GDAL3>的第二篇,总目录地址:https://www. ...
- MySQL直接导出CSV文件,并解决中文乱码的问题
需求: 需要导出hr_users 表中的部分字段的数据,以前是用PHP写脚本,然后导出CSV文件. 在MySQL中,它自己就能导出CSV文件 ,只不过是有如下几个问题需要大家解决. 1. 生成文件不成 ...
- sqlserver bcp命令导出数据
原文:sqlserver bcp命令导出数据 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net ...
- Spring Boot项目生成jar包,并在windows服务器中注册成服务,开机启动
背景: 使用Spring Boot开发的Web项目,打包生成了一个jar包,希望能部署在Windows服务器中 尝试: 1.Spring Boot生成的jar包,可以直接用java -jar运行,但是 ...
- PHP连接sqlserver的两种方法,向sqlserver2000中写入数据,中文乱码
项目环境是php5.3.28 项目用的ThinkPHP3.2.3 已经mysql5.5数据库,要和另一个项目对接,需要连接sqlsever2000数据库进行一些操作. 第一种用php自带扩展连接数据 ...
- iOS 中json解析数据出现中文乱码的问题
一般服务器的编码格式都是UTF8,这样通过json解析下来的的数据,一般中文是不会出现乱码,但是如果服务器的编码格式不是UTF8,通过json解析的数据中的中文容易出现luan乱码,怎么解决这个问题呢 ...
- impala-shell导出数据存在中文异常问题
由于查询在impala-shell 中没有问题,在导出数据的时候才有问题,这是impala-shell的客户端是由python编写的,而Python无法自动将unicode对象写入没有设置默认编码的输 ...
- sqoop导出到mysql中文乱码问题总结、utf8、gbk
sqoop导出到mysql中文乱码问题总结.utf8.gbk 今天使用sqoop1.4.5版本的(hadoop使用cdh5.4)因为乱码问题很是头痛半天.下面进行一一总结 命令: [root@sdzn ...
- mysql 恢复数据时中文乱码
mysql恢复数据时中文乱码,解决办法. 用source命令导入mysql数据库怎么设置中文编码 1.导出数据时指定编码在导出mysql sql执行文件的时候,指定一下编码格式: mysqldump ...
随机推荐
- 《Win10——如何设置开机自启动项》
Win10--如何设置开机自启动项 1. 为需要自启动的程序创建快捷方式. 2. Win+R输入"shell:startup",按下回车键出现一个文件夹. 3. 将快捷 ...
- Latex中也能展示动态图?
技术背景 在学术领域,很多文档是用Latex做的,甚至有很多人用Latex Beamer来做PPT演示文稿.虽然在易用性和美观等角度来说,Latex Beamer很大程度上不如PowerPoint,但 ...
- Kubernetes 多租户:资源配额
资源配额用于管理命名空间中对象使用的资源量,我们可以按 CPU 和内存用量或对象数量来设置配额.通过资源配额,可以确保租户不会使用超过其分配份额的集群资源. 资源配额是通过 ResourceQuota ...
- 第五章:Admin管理后台 - 3:Admin文档生成器
Django的admindocs应用可以从模型.视图.模板标签等地方获得文档内容. 一.概览 要激活admindocs,请按下面的步骤操作: 在INSTALLED_APPS内添加django.cont ...
- 基于CentOS 8服务器来搭建FastDFS高可用集群环境
服务器版本 我们在服务器的命令行输入如下命令来查看服务器的内核版本. [root@localhost lib]# cat /etc/redhat-release CentOS Linux releas ...
- java基础之常用类1
java基础 以下内容为本人的学习笔记,如需要转载,请声明原文链接 java常用类: 1.内部类 2.Object类 3.Object类常用方法 4.包装类 5.String类 6.BigDeci ...
- Apollo 中配置String、Map和List和默认值
摘要:在Apollo 中,配置String.Map和List等类型的信息,同时设置默认值. 综述 随着业务需求的变更,需要在Apollo中配置一个Map<String, List>类型 ...
- 大数据常用的Linux命令
Linux文件系统基础知识 要想熟练使用命令,就先要熟练掌握Linux文件系统基础知识: 三个路径 当前路径:也叫当前工作目录,就是当前状态下用户所处的位置 相对路径:相对于当前工作目录开始的路径,会 ...
- 代码随想录第十三天 | 150. 逆波兰表达式求值、239. 滑动窗口最大值、347.前 K 个高频元素
第一题150. 逆波兰表达式求值 根据 逆波兰表示法,求表达式的值. 有效的算符包括 +.-.*./ .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 注意 两个整数之间的除法只保留整数部分. ...
- 那齐博x3又什么什么?
那齐博x3又什么什么? 齐博x3是齐博X1/齐博x2之后的升级版本. 主要优化圈子系统