MySQL: CSV データのロード中の NULL 値の処理
欠落フィールドまたは空のフィールドが含まれる可能性のある CSV データを扱う場合、次のことが重要です。 MySQL がデータ読み込みプロセス中にこれらの null 値をどのように処理するかを説明します。この記事では、CSV ファイルから MySQL テーブルにデータをロードしようとしたときに発生した問題と、NULL 値を正確に処理できるようにその問題を解決する方法について説明します。
提供されたシナリオでは、CSV ファイルには次の内容が含まれていました。空のフィールドが含まれる可能性のある数値。ただし、MySQL LOAD コマンドを使用してデータがロードされた場合、行の最後に明示的に定義されていない空のフィールドは、NULL ではなくゼロとしてロードされていました。この誤った動作により、null 値とゼロ値の区別に問題が生じました。
この問題を解決する鍵は、null 値を適切に処理できるようにデータ読み込みプロセスをカスタマイズすることにあります。この解決策には、空のフィールドをローカル変数に読み取り、ローカル変数が空の文字列を保持する場合に、テーブル内の対応するフィールドを明示的に NULL に設定することが含まれます。
この解決策を組み込んだ変更されたコードの例を次に示します。
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 に空の文字列が含まれている場合、テーブル内の対応する four フィールドは NULL に設定されます。このアプローチにより、空のフィールドが NULL 値として正しく解釈され、ゼロ値との混同が防止されます。
または、複数のフィールドに 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,'') ;
これらのソリューションを実装することで、MySQL での CSV データのロード中に null 値を処理するという課題に効果的に対処できます。これにより、空のフィールドが NULL として正しく保存されるため、データの分析と処理において NULL 値とゼロ値を効果的に区別できるようになります。
以上がCSV データを MySQL にロードするときに NULL 値が正しく処理されるようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。