导入

参考:LOAD DATA INFILE 语法的官方手册

示例:

LOAD DATA INFILE 'data.txt' INTO TABLE db2.my_table;
LOAD DATA INFILE 'data.txt' INTO TABLE db2.my_table FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';

常用参数:

  • FIELDS TERMINATED BY ',':指定字段分隔符
  • OPTIONALLY ENCLOSED BY '"':认为双引号中的是一个独立的字段。Excel 转 CSV 时,有特殊字符(逗号、顿号等)的字段,会自动用双引号引起来
  • LINES TERMINATED BY '\n':指定行分隔符,注意,在 Windows 平台上创建的文件,分隔符是 '\r\n'

导出

参考:SELECT … INTO 语法的官方手册

SELECT … INTO 语法可以将查询结果保存到变量或文件中:

SELECT ... INTO var_list    # 将字段的值保存到变量中
SELECT ... INTO OUTFILE # 将选中的行保存到文件中。可以指定列和行的结束符,以生成指定格式的文件。
SELECT ... INTO DUMPFILE # 将一个单独的行写入文件中,没有格式

示例:

mysql > SELECT a,b,a+b INTO OUTFILE '/tmp/result.txt'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM test_table; mysql> SELECT * INTO OUTFILE '/var/lib/mysql-files/1.txt'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM professions;
Query OK, 2220 rows affected (0.04 sec)

常用参数(跟 LOAD DATA INFILE 语法一样):

  • FIELDS TERMINATED BY ',':指定字段分隔符
  • OPTIONALLY ENCLOSED BY '"':认为双引号中的是一个独立的字段。Excel 转 CSV 时,有特殊字符(逗号、顿号等)的字段,会自动用双引号引起来
  • LINES TERMINATED BY '\n':指定行分隔符,注意,在 Windows 平台上创建的文件,分隔符是 '\r\n'

清空表中的所有数据

操作失误时,需要简单的方式清空表,有两种方式:不带 where 参数的 delete 语句,或 truncate。

delete from my_table;
truncate table my_table;

truncate 相当于使用表的结构重新创建表,所有的状态都相当于新表。

不带 where 参数的 delete 则是将表中所有记录一条一条删除。

truncate 比 delete 快,但 truncate 删除后不记录日志,数据无法恢复。

注意事项

Windows 中用 Excel 导出的 CSV 文件,采用 UTF-8-BOM 编码,换行符是 CRLF 回车换行。但是在 Linux 中不支持 UTF-8-BOM 编码,需要手动转为 UTF-8 编码。如果换行符用 CRLF 回车换行,则需要在 LOAD DATA INFILE 命令中通过 LINES TERMINATED BY '\r\n' 明确指定换行符:

LOAD DATA INFILE 'data.txt' INTO TABLE db2.my_table FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';

如果已经转为 LF 换行了,则可以省略这一句。

常见问题

ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

这一般是因为,你上传或下载的文件没有在 MySQL 指定的安全目录中。默认情况下,MySQL 导入导出文件时,只能使用安全目录。使用下面的命令查看 MySQL 的安全目录:

mysql> SHOW VARIABLES LIKE "secure_file_priv";
+--------------------------+-----------------------+
| Variable_name | Value |
+--------------------------+-----------------------+
| require_secure_transport | OFF |
| secure_auth | ON |
| secure_file_priv | /var/lib/mysql-files/ |
+--------------------------+-----------------------+
3 rows in set (0.00 sec)

解决方案有两个:

  1. 将文件复制到 secure_file_priv 指定的安全目录。推荐。
  2. /etc/my.cnf 配置文件(Windows 平台下是 my.ini)中关闭 secure_file_priv。这个选项无法动态配置,修改后必须重启。

对于第一个方案,复制文件到安全目录后,需要使用完整路径:

mysql> load data infile '/var/lib/mysql-files/profession.csv' into table professionss fields terminated by ',' lines terminated by '\n';

数据中的第一个字段始终报错

如果是整数,则报错如下:

ERROR 1366 (HY000): Incorrect integer value: '1800' for column 'CompanyID' at row 1

Windows 平台下创建的文件基本上都使用了 BOM 头,即在文件的头部添加描述性信息,可以参考 这里。这会在 Linux 平台下导致致命错误,去掉这个 BOM 头就好了。

Excel 另存为 CSV 文件后,默认编码是“使用 UTF-8 BOM 编码”,在 Notepad++ 中打开文件,选择“使用 UTF-8 编码”保存即可清除 BOM 头:

部分数据保存失败,且有异常数据

数据中出现了双引号,且部分数据插入失败,并插入了部分异常数据:



Excel 另存为 CSV 文件后,对于特殊字符(逗号、顿号等)的字段,会自动用双引号引起来。但是添加的双引号的位置竟然会出错:

1800,1,3,2021304,202,"计算机系统分析技术人员
",1
1800,1,3,2021305,202,"维护工程师
",2
1800,1,3,2021306,202,"销售工程师
",1

可以看到,好多行发生了不应该的换行。两个解决方案:

  • 使用 OPTIONALLY ENCLOSED BY '"' 自动处理,推荐:
mysql> LOAD DATA INFILE '/var/lib/mysql-files/profession.csv' INTO TABLE professionss FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';
Query OK, 2220 rows affected (0.06 sec)
Records: 2220 Deleted: 0 Skipped: 0 Warnings: 0
  • 通过正则批量替换将 \n", 替换为 , 使表格数据没有问题:
mysql> LOAD DATA INFILE '/var/lib/mysql-files/profession.csv' INTO TABLE professionss FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';
Query OK, 2220 rows affected (0.06 sec)
Records: 2220 Deleted: 0 Skipped: 0 Warnings: 0

MySQL 导入导出 CSV 文件的更多相关文章

  1. MySql数据库导出csv文件命令

    MySql数据库导出csv文件命令: MySql数据库导出csv文件命令: mysql> select first_name,last_name,email from account into ...

  2. MYSQL导入导出.sql文件

    MYSQL导入导出.sql文件   一.MYSQL的命令行模式的设置:桌面->我的电脑->属性->环境变量->新建->PATH=“:path\mysql\bin;”其中p ...

  3. Mysql 导入导出csv 中文乱码

    这篇文章介绍了Mysql 导入导出csv 中文乱码问题的解决方法,有需要的朋友可以参考一下   导入csv: load data infile '/test.csv' into table table ...

  4. mysql SQLyog导入导出csv文件

    1.选择数据库表 --> 右击属性 --> 备份/导出 --> 导出表数据作为 --> 选择cvs --> 选择下面的“更改” --> 字段 --> 变量长度 ...

  5. [转]PL/SQL Developer 导入导出csv文件

    PL/SQL Developer 可以导入或者导出CSV文件. 导入CSV文件步骤: 1.选择tools->text importer.... 2.选择第二个Data to oracle选项卡, ...

  6. MySQL直接导出CSV文件,并解决中文乱码的问题

    需求: 需要导出hr_users 表中的部分字段的数据,以前是用PHP写脚本,然后导出CSV文件. 在MySQL中,它自己就能导出CSV文件 ,只不过是有如下几个问题需要大家解决. 1. 生成文件不成 ...

  7. Bash中使用MySQL导入导出CSV格式数据[转]

    转自: http://codingstandards.iteye.com/blog/604541 MySQL中导出CSV格式数据的SQL语句样本如下:   select * from test_inf ...

  8. 命令行模式下 MYSQL导入导出.sql文件的方法

    一.MYSQL的命令行模式的设置:桌面->我的电脑->属性->环境变量->新建->PATH=“:path\mysql\bin;”其中path为MYSQL的安装路径.二.简 ...

  9. mysql 导入导出.sql文件

    备份数据库(包含全部表和全部存储过程):C:\Documents and Settings\Administrator>mysqldump -h localhost -u root -p -R ...

随机推荐

  1. dfs找环

    http://acm.hdu.edu.cn/showproblem.php?pid=6736 Forest Program Time Limit: 2000/1000 MS (Java/Others) ...

  2. Codeforces 984D 题解(DP)

    题面 传送门 题目大意: 给你一个计算区间f函数的公式,举例f(1,2,4,8)=f(1⊕2,2⊕4,4⊕8)=f(3,6,12)=f(3⊕6,6⊕12)=f(5,10)=f(5⊕10)=f(15)= ...

  3. 靶形数独 (dfs+预处理+状态压缩)

    #2591. 「NOIP2009」靶形数独 [题目描述] 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们 ...

  4. Asp.Net MVC 5使用Identity之简单的注册和登陆

    由于.Net MVC 5登陆和注册方式有很多种,但是Identity方式去实现或许会更简单更容易理解 首先新建一个项目 其次如下选择Empty和MVC的选项 然后打开NuGet包管理器分别安装几个包 ...

  5. php使用Socket实现聊天室功能(书中的代码)

    这只是一种技术 <?php $host = "127.0.0.1"; // 指定监听的端口,注意该端口不能与现有应用的端口冲突 $port = '9505'; $null = ...

  6. Canvas和SVG的比较

    Canvas 和 SVG 都允许您在浏览器中创建图形,但是它们在根本上是不同的. SVG SVG 是一种使用 XML 描述 2D 图形的语言. SVG 基于 XML,这意味着 SVG DOM 中的每个 ...

  7. Dubbo源码学习总结系列三 dubbo-cluster集群模块

    Dubbo集群模块的目的是将集群Invokers构造一个透明的Invoker对象,其中包含了容错机制.负载均衡.目录服务(服务地址集合).路由机制等,为RPC层提供高可用.高并发.自动发现.可治理的S ...

  8. phpstorm 调试时浏览器显示The requested resource / was not found on this server

    1.进入thinkphp项目的public 目录运行以下命令即可 root@jiang:/var/www/tp5# php -S localhost:8080 router.php PHP 7.2.2 ...

  9. 未来HTML5的发展前景如何?黑客专家是这样回答的

    如果你想进军IT行业,如果你准备好掌握一项新技术,那么就选择HTML5.近日,我们采访了国内知名网络黑客安全专家郭盛华,帮助您了解当今最重要的技术.在本篇文章中,黑客安全专家郭盛华回答了有关HTML5 ...

  10. java 小数精确计算

    小数精确计算 System.out.println(2.00 -1.10);//0.8999999999999999 上面的计算出的结果不是 0.9,而是一连串的小数.问题在于1.1这个数字不能被精确 ...