0

LOAD DATA INFILE コマンドで特定のフィールドをスキップする方法を教えてください。

次のテーブルがあるとしましょう。

CREATE TABLE stuff (
    id INT UNSIGNED AUTO_INCREMENT NOT NULL,
    name CHAR(64) NOT NULL,
    junk CHAR(64) NOT NULL,
    a ENUM('N','Y') NOT NULL DEFAULT 'N',
    PRIMARY KEY (id)
);

そして私のファイル:

,name1,junk1,
,name2,junk2,
,name3,junk3,Y

次のステートメントを実行します。

LOAD DATA INFILE 'myfile' INTO TABLE stuff FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';

自動インクリメントを自動的にスキップして適切に処理しますか? すべてを適切に処理しているように見えますが、これにより次の警告が生成されます。

Warning (Code 1366): Incorrect integer value: '' for column 'id' at row 1
Warning (Code 1265): Data truncated for column 'a' at row 1
Warning (Code 1366): Incorrect integer value: '' for column 'id' at row 2
Warning (Code 1366): Incorrect integer value: '' for column 'id' at row 3
Warning (Code 1265): Data truncated for column 'a' at row 3
Warning (Code 1366): Incorrect integer value: '' for column 'id' at row 4

先頭のコンマを削除すると、データが正しく入力されません。

4

1 に答える 1

3

自動インクリメント値を使用するように、id を明示的に NULL に設定できます。

LOAD DATA INFILE 'myfile' 
INTO TABLE stuff 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n'
SET id = NULL;

最初のコンマを削除し、ファイル内の列を明示的にリストすることもお勧めします。

LOAD DATA INFILE 'myfile' 
INTO TABLE stuff 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n'
(name,junk,a)
SET id = NULL;
于 2011-03-09T16:21:52.397 に答える