ホームページ >データベース >mysql チュートリアル >LOAD DATA INFILE を使用して空のフィールドを含む CSV データを MySQL にインポートするときに、ゼロではなく NULL 値を処理するにはどうすればよいですか?
MySQL の LOAD コマンドは、CSV ファイルからテーブルにデータをインポートする簡単な方法を提供します。ただし、空のフィールドを含む CSV ファイルから数値データをロードする場合、カラムが NULL 可能として定義されている場合でも、MySQL は NULL の代わりにゼロを挿入する傾向があります。
次の CSV ファイル (testdata.txt) について考えてみましょう。
1,2,3,4,5 1,2,3,,5 1,2,3
そして次の MySQL テーブル (moo):
CREATE TABLE moo ( one INT(1) NULL, two INT(1) NULL, three INT(1) NULL, four INT(1) NULL, five INT(1) NULL );
LOAD コマンドを使用して CSV データを moo テーブルに追加します:
LOAD DATA INFILE '/tmp/testdata.txt' INTO TABLE moo FIELDS TERMINATED BY "," LINES TERMINATED BY "\n";
結果のテーブルには次のものが含まれます:
+------+------+-------+------+------+ | one | two | three | four | five | +------+------+-------+------+------+ | 1 | 2 | 3 | 4 | 5 | | 1 | 2 | 3 | 0 | 5 | | 1 | 2 | 3 | NULL | NULL | +------+------+-------+------+------+
ご覧のとおり、MySQL は空のフィールドに 0 を割り当てますが、これは正しくありません。列で NULL 値が許可される場合。
この問題に対処し、空のフィールドが NULL として正しく処理されるようにするには、NULLIF() 関数を使用します。 NULLIF() は 2 つの引数を取ります。チェックされるフィールドと、フィールドが空の場合に返す値です。使用方法は次のとおりです:
LOAD DATA INFILE '/tmp/testdata.txt' INTO TABLE moo FIELDS TERMINATED BY "," LINES TERMINATED BY "\n" (one, two, three, @vfour, five) SET four = NULLIF(@vfour,'') ;
この例では、4 番目のフィールドがローカル変数 @vfour に読み込まれます。 @vfour が空の文字列の場合、SET ステートメントは 4 を NULL に割り当てます。
複数のフィールドが空である可能性がある場合は、それらをすべてローカル変数に読み取り、複数の SET ステートメントを利用します:
LOAD DATA INFILE '/tmp/testdata.txt' INTO TABLE moo FIELDS TERMINATED BY "," LINES TERMINATED BY "\n" (@vone, @vtwo, @vthree, @vfour, @vfive) SET one = NULLIF(@vone,''), two = NULLIF(@vtwo,''), three = NULLIF(@vthree,''), four = NULLIF(@vfour,'') ;
NULLIF() を活用することで、MySQL LOAD は空のフィールドを正しく処理し、NULL 値を割り当てることができるようになり、MySQL テーブル内のデータを正確に操作できるようになります。
以上がLOAD DATA INFILE を使用して空のフィールドを含む CSV データを MySQL にインポートするときに、ゼロではなく NULL 値を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。