首先要进入mysql命令行,输入 SHOW VARIABLES LIKE '%secure%';获取secure_file_priv的值,该值是csv文件的存放路径。
具体操作过程如下图所示
然后将数据库中的表按如下指令导出.csv文件
select * from t_user
into outfile 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/user.csv'
fields terminated by ','
optionally enclosed by '"'
escaped by '"'
lines terminated by '\r\n';
这里的user.csv文件有20多万条记录,字段有如下图所示
导出非常快!
secure_file_priv 的值可以在 my.ini文件中找到和修改。
在MySQL5.6中my.ini位于安装路径下,而MySQL5.7中my.ini位于ProgramData文件夹下的MySQL中.
参数说明:
FIELDS TERMINATED BY ',':指定字段分隔符为,(逗号),默认是空格
OPTIONALLY ENCLOSED BY '"':认为双引号中的是一个独立的字段。Excel 转 CSV 时,有特殊字符(逗号、顿号等)的字段,会自动用双引号引起来,注意这里看到是两个双引号,实际上是一对 '(单引号)里面一个"(双引号),默认是不使用符号进行区别
LINES TERMINATED BY '\n':指定行分隔符为\n(换行),注意,在 Windows 平台上创建的文件,分隔符是 '\r\n'。默认是一条记录+一个换行符,即每条记录占一行。这里设置与否都一样。
上面的语句归纳为:
select 字段1[,字段2...,字段n] from table_name condition
into outfile 'secure_file_priv所指向的路径+filename.csv'
fields terminated by ','--可以不设置
optionally enclosed by '"' --可以不设置
escaped by '"' --可以不设置
lines terminated by '\r\n'; --可以不设置
比如有t_book表如下所示
执行查询语句
SELECT * FROM t_book
WHERE publishDate BETWEEN '2012-01-01' AND '2018-10-01'
AND price BETWEEN 1000 AND 10000
AND bookName LIKE CONCAT('%','名','%')
AND kind='言情'
LIMIT 0,198
into outfile 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/t_book.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
结果如图所示
以上内容涉及数据库表t_book,可以下载我的t_book资源进行实验
关于乱码的解决
乱码时可以通过 character set 编码格式进行设置,比如
SELECT * from t_book
INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 5.6/Uploads/t_book.csv'
CHARACTER SET gbk
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n';