• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:csvをDBへ読み込んだら、NULLが勝手に0に)

csvファイルをMySQLへ読み込んだら、空白のところが勝手に0に置き換わる理由とリスク、データ型が変わることで影響するPHPの書き方

このQ&Aのポイント
  • csvファイルをMySQLへ読み込んだら、空白のところが勝手に0に置き換わる理由とリスク、データ型が変わることで影響するPHPの書き方について調査しました。
  • データ型を決める際、数字はINT、文字列はVARCHARという認識が一般的ですが、INT型のカラムをVARCHAR型に変えるリスクとしては、データの不整合やパフォーマンスの低下が考えられます。
  • DBのデータ型が「INT」と「VARCHAR」では、PHP側の書き方も変わってきます。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

>考えられる原因としては、DBの設定? >それとも、PHP側の書き方でしょうか? 入力するcsvファイルの作成の仕方に、問題があります。 NULLで格納するには、入力ファイルの該当カラム位置に、\Nを入れておく必要があります。 例えば、次のような入力ファイルだったとします。 xxx,,yyyyy xxxxx,100,y xx,\N,yy 1レコード目の2番目のフィールドは値が入っていませんが、この場合の扱いは次のようになります。 列のデータ型が文字・・・長さ0の文字。すなわちnullではない。 列のデータ型が数値・・・0。すなわちnullではない。 >今回のように、INT型のカラムを、VARCHAR型に、変えたりすると、 >起こり得るリスクとしては、どのようなものが考えられでしょうか? 数値以外のデータが入る可能性がありますが、それが実害が出るかどうかは、その列がどういう意味のものか次第です。 (1)在庫数など数値演算するような列 (2)商品コード、注文番号、フラグなどの列 といったことで話は違ってきます。

参考URL:
http://dev.mysql.com/doc/refman/5.1/ja/load-data.html
re999
質問者

お礼

回答ありがとうございました。 >列のデータ型が文字・・・長さ0の文字。すなわちnullではない。 >列のデータ型が数値・・・0。すなわちnullではない。 など、説明、大変分かりやすかったです。 >実害が出るかどうかは、その列がどういう意味のものか次第 >(1)在庫数など数値演算するような列 >(2)商品コード、注文番号、フラグなどの列 こちらもありがとうございました。 言われてみれば、確かにそのとおりですね。 おかげで頭の中を整理することができましたー。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

空文字はNULLではありません 区切り記号を「;」、囲み記号を「"」として NULL値がOKでデフォルトがNULLのINT型フィールドにデータ投入するとき ""は0ですね。どうしてもNULLを投入したいならNULLと書いてください。 たとえば・・・ "100";"1000" "200";"" "300";"0" "400";NULL 200と300の行はともに0です。 処理としてはエディタかなにかで""をNULLに一括変換してから 投入すればいいでしょう。

re999
質問者

お礼

回答ありがとうございました。 >空文字はNULLではありません >囲み記号を「"」としてNULL値がOKでデフォルトがNULLのINT型フィールドにデータ投入するとき""は0ですね。 全然知りませんでした。 勉強になりましたー

関連するQ&A