MySql导入/导出csv文件

MySql导入/导出csv文件

        • 1. 导入
        • 2. 导出
        • 3. 注意事项

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辅助导入/导出。
MySql导入/导出csv文件_第1张图片

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. 注意事项

  1. Windows平台csv文件编码:
    1)win下保存的csv文件注意要手动转至utf-8编码。
    Excel 另存为 CSV 文件后,默认编码是“使用 UTF-8 BOM 编码”,在 Notepad++ 中打开文件,选择“使用 UTF-8 编码”保存即可清除 BOM 头:
    2)数据正常,但无法导入数据,可尝试去除csv头(第一行title)
    在这里插入图片描述
  2. 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#>

“=” 后指定安全目录。推荐使用这种方式。

你可能感兴趣的:(运维,MySQL,数据库)