mysql - 从 CSV 导入到 (My)SQL 数据库时,我能否将 Unix 时间戳自动转换为 DATETIME 列?

标签 mysql csv datetime unix-timestamp

我创建了一个包含 timestamp DATETIME 的表列,我正在尝试从 CSV 导入数据具有 Unix 时间戳行的文件。

但是,当我尝试使用 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 不是最好的工具,但这几乎是我能做的所有事情,因为我无法直接访问运行数据库服务器的机器[*]。显然,如果我将列设置为 INT,这将起作用。 .

是否有一种配置表以便自动进行转换的方法?


[*] 我知道,但 DBMS 在 Docker 容器内运行,因此,如果不在主机上复制 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了解详情。

关于mysql - 从 CSV 导入到 (My)SQL 数据库时,我能否将 Unix 时间戳自动转换为 DATETIME 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47945505/

相关文章:

arrays - Postgres 不允许在 COPY 中使用 ARRAY 语法

iphone - 在 iPad 中计算纪元时间

r - R 中日期的定制地板/天花板

php - 左连接 ON 条件和 Doctrine 中的其他条件语法

php - 电视节目数据库 : delete shows that has foreign key seasons

mysql - 我正在尝试使用 2 个相同的 INNER JOIN 函数,但我无法让它工作

MYSQL 使用 LOAD DATA INFILE 将数据从 .csv 导入到特定列的升序

csv - Access VBA 将 CSV 文件导出为 UTF-8

c# - 如何从数据库中选择一周的日期?

mysql - jboss 6.3管理应用程序无法识别mysql驱动程序