带有默认时间戳列值的 mysql LOAD DATA LOCAL INFILE

标签 mysql jdbc load-data-infile

我有一个表,其中有一列定义如下:

| 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 列,因此该文件没有任何值(value),因此我期望 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 ... 查询,它(显然)会按预期工作。

谁能告诉我我错过了什么?

最佳答案

表:

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`);

关于带有默认时间戳列值的 mysql LOAD DATA LOCAL INFILE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32939947/

相关文章:

mysql - 防止 LOAD DATA INFILE 转义双引号

php - 在 LOAD DATA LOCAL INFILE 中收到错误消息

php - 如何将 Codeigniter 预格式化查询转换为原始 Mysql 查询(例如 $this->db->select ('table1.*,table2.*,table3.*' ))

html - 让两个(最少)在 mysql 的一个查询中工作

php - 将Mysql数据插入Json文件不起作用

mysql - 存储过程在应该返回任何值时没有返回任何值(MySQL)

sql - 如果作者写了不止一篇文章,为什么这个SQL查询将文章的作者名返回NULL?

java - 如何在使用 spring jdbc 模板获取时自动格式化时间戳列?

java - 通过 JDBC 调用 Sybase 存储过程时出现空结果集

php - 加载数据文件并计算mysql中的重复行