作为测试,我们这里使用了名为testdb
的数据库中的名为test_table
的表,首先我们使用如下SQL来查看其中有何数据:
select * from testdb.test_table
数据如下:
id | name | age | point | brief |
---|---|---|---|---|
1 | 刘德华 | 23 | 96.12 | 我爱你亲爱的姑娘 |
2 | 周杰伦 | 22 | 93.20 | 七里香 |
3 | 0 | 0.00 | ||
4 | 周润发 | 0 | 0.00 | "有没有人曾告诉你" |
然后在命令行执行如下指令尝试导出CSV文件:
mysqldump -uroot -p testdb test_table -t -T "D:/test/data/" --fields-enclosed-by="" --fields-terminated-by=","
然后就看到报错了:
SQL 错误 [1290] [HY000]: The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
然后我们在MySQL命令行下执行:
show variables like '%secure%'
看到结果:
Variable_name |Value |
-------------------------|-----------------------------------------------|
require_secure_transport |OFF |
secure_auth |ON |
secure_file_priv |C:ProgramDataMySQLMySQL Server 5.7Uploads |
这里的secure_file_priv
表示我们默认只能将导出的文件放到这个位置:C:ProgramDataMySQLMySQL Server 5.7Uploads
我们这里尝试将C:ProgramDataMySQLMySQL Server 5.7
目录下的my.ini
文件进行如下修改:
在
secure-file-priv="C:/ProgramData/MySQL/MySQL Server 5.7/Uploads"
这一行前面加一个#
改为:
# secure-file-priv="C:/ProgramData/MySQL/MySQL Server 5.7/Uploads"
然后在命令行执行services.msc
进入服务管理界面,重启mySQL5.7对应的服务。
但是发现这样还是不行的。
继续尝试将这一行取消掉注释,并改成:
secure-file-priv=""
然后重启MySQL服务。
执行如下命令导出结果:
mysqldump -uroot -p testdb test_table -t -T "D:/test/data/" --fields-enclosed-by="" --fields-terminated-by=","
发现可以了,在D:/test/data/
目录下生成了两个文件:
- test_table.sql
- test_table.txt
test_table.sql内容为空,因为-t
选项设置成了表结果不导出;
test_table.txt内容如下:
1\,刘德华\,23\,96.12\,我爱你亲爱的姑娘
2\,周杰伦\,22\,93.20\,七里香
3\,\, \, .00\,\
4\,周润发\, \, .00\,"有没有人曾告诉你"
这个时候发现好像哪里不对,哦,原来我双引号的地方没有填写好,暂时还不知道怎么办,所以尝试下面这种办法。
我们可以执行如下SQL在MySQL命令行下导出数据:
SELECT * INTO OUTFILE 'D:/test20181120.csv'
FIELDS TERMINATED BY ',' OPTIONALLY
ENCLOSED BY '"'
LINES TERMINATED BY '
'
FROM testdb.test_table;
执行完SQL后,会在D盘根目录下生成一个名为test20181120.csv
的文件,内容如下:
1,"刘德华",23,96.12,"我爱你亲爱的姑娘"
2,"周杰伦",22,93.20,"七里香"
3,"",0,0.00,""
4,"周润发",0,0.00,""有没有人曾告诉你""