关于MySQL中使用LOAD DATA INFILE导入csv文件时的日期格式问题

在使用MySQL时,常常会用到Load Data Infile来导入数据,在遇到Date类型的列时,有时会遇到格式转换的问题:
首先创建一张简单的people表,包含名字,生日,年龄三个字段:
mysql> create table people(
-> name varchar(10) NOT NULL,
-> birthday date NOT NULL,
-> age int NOT NULL);
Query OK, 0 rows affected (0.18 sec)
构造两个测试文件,导入到people表中,如下图:
这里写图片描述
关于MySQL中使用LOAD DATA INFILE导入csv文件时的日期格式问题
可以看到两个文件仅有生日的格式不同,我们对两个文件分别用load data local infile进行导入测试,结果如下:
这里写图片描述
关于MySQL中使用LOAD DATA INFILE导入csv文件时的日期格式问题
关于MySQL中使用LOAD DATA INFILE导入csv文件时的日期格式问题
可以看到test1.txt中的形如%Y-%m-%d格式的日期可以被正确导入,而test2.txt中的形如%m/%d/%Y格式的日期无法被正确导入,提示数据被截断。

检查一下与date有关的系统变量如下:
这里写图片描述
关于MySQL中使用LOAD DATA INFILE导入csv文件时的日期格式问题
发现mysql中date_format的默认值是%Y-%m-%d,尝试修改该变量的值,返回如下错误:
mysql> set date_format=’%m/%d/%Y’;
ERROR 1238 (HY000): Variable ‘date_format’ is a read only variable
那么我们直接在配置文件my.ini中设置该值,重启mysql服务,成功修改了date_format的值:
这里写图片描述
关于MySQL中使用LOAD DATA INFILE导入csv文件时的日期格式问题
重新导入test2.txt,本以为可以正常导入,结果却和原来一样,连显示格式都没有变:
mysql> select * from people;
+——+————+—–+
| name | birthday | age |
+——+————+—–+
| Lily | 0000-00-00 | 25 |
| Lucy | 0000-00-00 | 23 |
+——+————+—–+
2 rows in set (0.00 sec)
百度一下据说这个变量已经被mysql抛弃了…………

那么问题来了,如何正确导入非默认格式的date数据呢?
尝试了一下大概有三个办法:
1.使用编辑软件将csv文件中的日期格式转换成mysql默认的日期格式,然后再导入;
2.使用某些第三方软件进行导入,如navicat,自带日期格式转换功能;
3.在load data local infile语句中使用STR_TO_DATE函数进行转换:
这里写图片描述
关于MySQL中使用LOAD DATA INFILE导入csv文件时的日期格式问题
个人推荐使用第三种方法,实际测试命令行下导入数据比通过客户端软件导入速度快太多了。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LOAD DATA INFILE语句用于将CSV文件数据导入MySQL。下面是LOAD DATA INFILE语句的一般使用方法: ```sql LOAD DATA INFILE 'path_to_csv_file' INTO TABLE table_name FIELDS TERMINATED BY ',' -- 指定CSV文件字段的分隔符 ENCLOSED BY '"' -- 指定CSV文件字段的引号字符 LINES TERMINATED BY '\n' -- 指定CSV文件行的分隔符 IGNORE 1 ROWS; -- 可选,忽略CSV文件的表头行 ``` 具体说明如下: - `'path_to_csv_file'`:CSV文件的路径,可以是相对路径或绝对路径。 - `table_name`:要导入数据的目标表名。 - `FIELDS TERMINATED BY ','`:指定CSV文件字段的分隔符。常见的分隔符是逗号(,)。 - `ENCLOSED BY '"'`:指定CSV文件字段的引号字符。如果CSV文件的字段没有被引号包围,可以省略该选项。 - `LINES TERMINATED BY '\n'`:指定CSV文件行的分隔符。常见的分隔符是换行符(\n)。 - `IGNORE 1 ROWS`:可选,表示忽略CSV文件的表头行。如果CSV文件包含表头行,可以使用该选项进行忽略。 注意事项: - 在使用LOAD DATA INFILE语句导入数据之前,确保MySQL用户具有文件读取权限,并且CSV文件的路径是可访问的。 - 确保CSV文件的字段与目标表的字段一一对应,并且数据类型匹配。 - 如果CSV文件数据存在错误或格式问题,可能导致导入失败。在导入之前,最好预览和检查CSV文件的内容。 这是LOAD DATA INFILE语句的一般用法,你可以根据实际情况进行调整和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值