2015-10-05 169 views
1

我已經具有這樣定義的列的表:MySQL的LOAD DATA LOCAL 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 |網件||||| 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 ...查詢,它(顯然)按預期工作。

任何人都可以告訴我我錯過了什麼?

+0

你試過從工作臺執行查詢,查詢瀏覽器, phpmyadmin,o r控制檯不使用JDBC? –

+0

好問題;直接來自mysql CLI控制檯,它的失敗是這樣的:錯誤1148(42000):這個MySQL版本不允許使用命令 – alexakarpov

+0

你使用的是什麼MySQL版本? –

回答

3

表:

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