我创建了一个具有timestamp DATETIME
列的表,我正在尝试从具有UNIX时间戳行的CSV
文件导入数据。
但是,当我尝试使用DataGrip的CSV导入功能时,我会发现
的曲调错误1:1: conversion failed: "1394669640" to datetime
2:1: conversion failed: "1394670060" to datetime
3:1: conversion failed: "1394670480" to datetime
4:1: conversion failed: "1394670780" to datetime
也许DataGrip不是最好的工具,但这几乎是我所能做的,因为我无法直接访问运行DB服务器的机器[*]。显然,如果我将列设置为INT
。
是否有一种配置表以使转换自动发生的方法?
[*]我做到了,但是DBM在Docker容器中运行,因此,除了在主机上复制CSV文件,然后在容器中复制CSV文件,我无法播放LOAD DATA INFILE
之类的技巧,并使用FROM_UNIXTIME()
设置列。
您可以使用LOAD DATA LOCAL INFILE
将CSV文件加载到远程MySQL(即在Docker容器中),而无需将CSV文件复制到容器中。
mysql> create table MyTable (timestamp DATETIME PRIMARY KEY);
mysql> load data local infile 'data.csv' into table MyTable (@dummy)
SET timestamp = FROM_UNIXTIME(@dummy);
Query OK, 4 rows affected (0.01 sec)
Records: 4 Deleted: 0 Skipped: 0 Warnings: 0
mysql> select * from MyTable;
+---------------------+
| timestamp |
+---------------------+
| 2014-03-13 00:14:00 |
| 2014-03-13 00:21:00 |
| 2014-03-13 00:28:00 |
| 2014-03-13 00:33:00 |
+---------------------+
注意,需要在服务器上启用local-infile
选项,以允许远程客户端以及在客户端中。要完成上面的示例,我必须在服务器的/etc/my.cnf
中启用local-infile=1
,并且还使用选项mysql --local-infile
运行了客户端。没有这两个选项,我都会得到这个非常令人困惑的错误:
错误1148(42000):此MySQL版本不允许使用过的命令
阅读https://dev.mysql.com/doc/refman/5.7/en/load-data-local.html有关详细信息。