1. 导入
(前提是已创建CSV_DB.TBL_NAME的表)
LOAD DATA INFILE '/home/download/test.csv' INTO TABLE CSV_DB.TBL_NAME 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’
如果需要导入一个列数很多的表,手动创建表会很麻烦。可以使用phpMyAdmin辅助导入/导出。
2. 导出
SELECT … INTO 语法可以将查询结果保存到变量或文件中:
- SELECT … INTO var_list # 将字段的值保存到变量中
- SELECT … INTO OUTFILE # 将选中的行保存到文件中。可以指定列和行的结束符,以生成指定格式的文件。
- SELECT … INTO DUMPFILE # 将一个单独的行写入文件中,没有格式
mysql > SELECT a,b,a+b INTO OUTFILE '/home/download/test.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM test_table;
mysql> SELECT * INTO OUTFILE '/home/download/test.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM TBL_NAME;
Query OK, 21000 rows affected (2.01 sec)
常用参数(跟 LOAD DATA INFILE 语法一样):
- FIELDS TERMINATED BY ‘,’:指定字段分隔符
- OPTIONALLY ENCLOSED BY ‘"’:认为双引号中的是一个独立的字段。Excel 转 CSV 时,有特殊字符(逗号、顿号等)的字段,会自动用双引号引起来
- LINES TERMINATED BY ‘\n’:指定行分隔符,注意,在 Windows 平台上创建的文件,分隔符是 ‘\r\n’
3. 注意事项
- Windows平台csv文件编码:
1)win下保存的csv文件注意要手动转至utf-8编码。
Excel 另存为 CSV 文件后,默认编码是“使用 UTF-8 BOM 编码”,在 Notepad++ 中打开文件,选择“使用 UTF-8 编码”保存即可清除 BOM 头:
2)数据正常,但无法导入数据,可尝试去除csv头(第一行title)
- Show fail “ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement”
这是由于上传或下载的文件没有在 MySQL 指定的安全目录中, 或者安全目录根本没有开启。
使用以下命令查看安全目录状态:
SHOW VARIABLES LIKE "secure_file_priv";
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)在 /etc/my.cnf 配置文件(Windows 平台下是 my.ini)中添加:
secure_file_priv =
“=” 后值为空,意为无限制,你可以使用任意目录
2)在 /etc/my.cnf 配置文件(Windows 平台下是 my.ini)中添加:
secure_file_priv = <#your safe dir#>
“=” 后指定安全目录。推荐使用这种方式。