从 CSV 导入到 (My)SQL 数据库时,我能否将 Unix 时间戳自动转换为 DATETIME 列?
Can I get Unix timestamp automatically converted to a DATETIME column when importing from CSV to a (My)SQL database?
我创建了一个 table,它有一个 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
.
有没有办法配置 table 以便自动进行转换?
[*] 我知道,但是 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 了解详情。
我创建了一个 table,它有一个 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
.
有没有办法配置 table 以便自动进行转换?
[*] 我知道,但是 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 了解详情。