mysql 使用默认时间戳列值加载数据本地 INFILE
mysql LOAD DATA LOCAL INFILE with default timestamp column value
我有一个 table,其中有一列定义如下:
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------+------+-----+-------------------+----------------+
| created_at | timestamp | NO | | CURRENT_TIMESTAMP | |
然后我使用这个命令插入数据:
LOAD DATA LOCAL INFILE '<path_to_the_file>' INTO TABLE my_table FIELDS TERMINATED BY '|' (<some_columns>,created_at,<more_columns>)
来自一个文件,其中每一行都是这样的:
822202|NETGEAR|||||1448ce8f-efc5-7b07-6982-1ff991bf967e||||||||1|||
注意:created_at 是第 5 列,因此该文件没有任何价值,因此我希望 CURRENT_TIMESTAMP
相反,这是我看到的:
mysql> select distinct created_at from my_table;
+---------------------+
| created_at |
+---------------------+
| 0000-00-00 00:00:00 |
+---------------------+
1 row in set (0.00 sec)
据推测,命令的代码 运行 使用标准 JDBC,它是一个 jdbc.clj Clojure 库。
注意 2:如果我 运行 INSERT INTO ... 手动查询,它(显然)按预期工作。
谁能告诉我我错过了什么?
Table:
DROP TABLE IF EXISTS `test_table`;
CREATE TABLE `test_table` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`column0` VARCHAR(6) DEFAULT NULL,
`column1` VARCHAR(20) DEFAULT NULL,
`column2` VARCHAR(20) DEFAULT NULL,
`column3` VARCHAR(20) DEFAULT NULL,
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`column5` VARCHAR(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
文件:
/path/to/test_file.txt
822202|NETGEAR||||1
822203|NETGEAR1|||2000-01-01 00:00:00|2
822204|NETGEAR2|||NULL|3
822205|NETGEAR3|||\N|4
MySQL 命令行:
mysql> LOAD DATA INFILE '/path/to/test_file.txt'
INTO TABLE `test_table`
FIELDS TERMINATED BY '|'
(`column0`, `column1`, `column2`, `column3`, @`created_at`, `column5`)
SET `created_at` = IF(CHAR_LENGTH(TRIM(@`created_at`)) = 0
OR
TRIM(@`created_at`) = 'NULL', NULL, @`created_at`);
我有一个 table,其中有一列定义如下:
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------+------+-----+-------------------+----------------+
| created_at | timestamp | NO | | CURRENT_TIMESTAMP | |
然后我使用这个命令插入数据:
LOAD DATA LOCAL INFILE '<path_to_the_file>' INTO TABLE my_table FIELDS TERMINATED BY '|' (<some_columns>,created_at,<more_columns>)
来自一个文件,其中每一行都是这样的:
822202|NETGEAR|||||1448ce8f-efc5-7b07-6982-1ff991bf967e||||||||1|||
注意:created_at 是第 5 列,因此该文件没有任何价值,因此我希望 CURRENT_TIMESTAMP
相反,这是我看到的:
mysql> select distinct created_at from my_table;
+---------------------+
| created_at |
+---------------------+
| 0000-00-00 00:00:00 |
+---------------------+
1 row in set (0.00 sec)
据推测,命令的代码 运行 使用标准 JDBC,它是一个 jdbc.clj Clojure 库。
注意 2:如果我 运行 INSERT INTO ... 手动查询,它(显然)按预期工作。
谁能告诉我我错过了什么?
Table:
DROP TABLE IF EXISTS `test_table`;
CREATE TABLE `test_table` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`column0` VARCHAR(6) DEFAULT NULL,
`column1` VARCHAR(20) DEFAULT NULL,
`column2` VARCHAR(20) DEFAULT NULL,
`column3` VARCHAR(20) DEFAULT NULL,
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`column5` VARCHAR(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
文件:
/path/to/test_file.txt
822202|NETGEAR||||1
822203|NETGEAR1|||2000-01-01 00:00:00|2
822204|NETGEAR2|||NULL|3
822205|NETGEAR3|||\N|4
MySQL 命令行:
mysql> LOAD DATA INFILE '/path/to/test_file.txt'
INTO TABLE `test_table`
FIELDS TERMINATED BY '|'
(`column0`, `column1`, `column2`, `column3`, @`created_at`, `column5`)
SET `created_at` = IF(CHAR_LENGTH(TRIM(@`created_at`)) = 0
OR
TRIM(@`created_at`) = 'NULL', NULL, @`created_at`);