2013-04-10 93 views
0

我正在使用LOAD DATA INFILE填充測試數據的MySQL表並且看到我不明白的行爲。 timestamp列(默認值= CURRENT_TIMESTAMP)正在更新一些記錄,其他人看起來隨機地用YANG 00:00:00更新。時間戳字段在LOAD DATA INFILE期間沒有正確更新

Questions Table Structure: 
Column    Type  Null Default    Comments 
Q_ID    int(10) No   
Clients_ID   int(10) No   
Question   varchar(255) No 

。 。其他領域遺漏了 。

Submit_Timestamp timestamp No  CURRENT_TIMESTAMP 

連接到數據庫後,這裏的代碼中的相關行:

// prepare the SQL query for the Questions table 

$sql = "LOAD DATA INFILE 'c:/wamp/www/Q_Sample_01.CSV' INTO TABLE Questions FIELDS TERMINATED BY ','"; 

// submit the query and capture the result 

$result = mysqli_query($conn, $sql) or die (mysqli_error($conn)); 

程序執行和數據與Submit_Timestamp領域外,有時插入到所有領域適當得到正確的結果,有時會得到0000-00-00 00:00:00。

CSV文件在所有記錄中都有一個前導逗號,用於指示缺少的Q_ID數據。 Q_ID字段即Autoincrement正在正常工作。在CSV行的末尾沒有時間戳的數據,我希望MySQL能夠輸入默認值。我試圖在CSV中列出的最後一個字段後面加上尾隨的昏迷,認爲這可能會使得它更加清晰,有數據要添加到Submit_Timestamp字段中,但它讓事情變得更糟,給我的信息是:0000-00-00 00:00:00爲每個記錄。

我也嘗試了一個建議,改變表提交Submit_Timestamp ON UPDATE CURRENT_TIMESTAMP,但它沒有幫助,而不是我想要的這個字段的行爲,所以我刪除它。

我剛剛注意到了一個模式,儘管它還沒有解釋給我。獲取時間戳記全部爲0的記錄至少有一個字段帶有雙引號,以防止包含的逗號不恰當地指示新字段。這並不總是在最後一個字段(與Submit_Timestamp字段相鄰)。 CSV是在Microsoft Excel中創建的。

我哪裏錯了?

回答

1

Excel保存爲CSV對於包含逗號的字符串數據有問題。

您可以通過將分隔符更改爲不在數據中的東西來輕鬆解決此問題。我用'|' (在我的鍵盤上的反斜槓上方)。

您還需要更改SQL命令以將此更改合併到分隔符中。

$sql = "LOAD DATA INFILE 'c:/wamp/www/Q_Sample_01.CSV' INTO TABLE Questions FIELDS TERMINATED BY '|'";

這完美地工作。