LOAD DATA INFILE を使用して MySQL テーブルにテスト データを入力していますが、理解できない動作が見られます。タイムスタンプ列 (デフォルト = CURRENT_TIMESTAMP) は、一部のレコードを正しく更新し、他のレコードは一見ランダムに 0000-00-00 00:00:00 で更新しています。
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 フィールドを除いてすべてのフィールドにデータが正しく INSERT されます。ただし、Submit_Timestamp フィールドは正しい結果を取得する場合もあれば、0000-00-00 00:00:00 を取得する場合もあります。
CSV ファイルには、不足している Q_ID データを示すために、すべてのレコードの先頭にカンマがあります。Autoincrement である Q_ID フィールドは正しく機能しています。CSV 行の末尾にタイムスタンプのデータがありません。MySQL がデフォルト値を入力することを期待しています。Submit_Timestamp フィールドに追加するデータがあることがより明確になるかもしれないと考えて、CSV にリストされている最後のフィールドの後に末尾のカンマを挿入しようとしましたが、状況が悪化し、0000-00-00 00:00:00 が表示されました。すべての記録のために。
Submit_Timestamp ON UPDATE CURRENT_TIMESTAMP を作成するテーブルを変更する提案も試みましたが、役に立たず、このフィールドに必要な動作ではないため、削除しました。
パターンに気付きましたが、まだ説明がつきません。タイムスタンプがすべて 0 のレコードには、二重引用符で囲まれたフィールドが少なくとも 1 つ含まれており、含まれているカンマが新しいフィールドを不適切に示してしまうのを防ぎます。これは、常に最後のフィールド (Submit_Timestamp フィールドに隣接する) にあるとは限りません。CSV は Microsoft Excel で作成されました。
どこが間違っていますか?