
csvファイルをMySQLへ読み込んだら、空白のところが勝手に0に置き換わってしまいました。
置き換わったカラムの型が、全部INTだったので、
試しにVARCHARへ変え、再度、取り込み処理を実施してみたところ、
希望通りに(空白のところは空白のままで)無事データを取り込むことが出来ました。
■質問1
考えられる原因としては、DBの設定?
それとも、PHP側の書き方でしょうか?
■質問2
データ型を決める際、数字はINT、文字列はVARCHAR、ぐらいの認識しかないのですが、
今回のように、INT型のカラムを、VARCHAR型に、変えたりすると、
起こり得るリスクとしては、どのようなものが考えられでしょうか?
■質問3
DBのデータ型が、「INT」と「VARCHAR」では、PHP側の書き方も変わってくるのでしょうか?
□PHPの内容
▽まず、UTF-8形式で上書き
exec("nkf -w --overwrite data.csv");
▽接続後読み込み
$sql = "LOAD DATA LOCAL INFILE '$file' INTO TABLE `読み込むテーブルの名前` FIELDS TERMINATED BY ',' ENCLOSED BY '\"' ESCAPED BY '\\\' LINES TERMINATED BY '\\r\\n'";
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 …
回答ありがとうございました。
>列のデータ型が文字・・・長さ0の文字。すなわちnullではない。
>列のデータ型が数値・・・0。すなわちnullではない。
など、説明、大変分かりやすかったです。
>実害が出るかどうかは、その列がどういう意味のものか次第
>(1)在庫数など数値演算するような列
>(2)商品コード、注文番号、フラグなどの列
こちらもありがとうございました。
言われてみれば、確かにそのとおりですね。
おかげで頭の中を整理することができましたー。
No.1
- 回答日時:
空文字はNULLではありません
区切り記号を「;」、囲み記号を「"」として
NULL値がOKでデフォルトがNULLのINT型フィールドにデータ投入するとき
""は0ですね。どうしてもNULLを投入したいならNULLと書いてください。
たとえば・・・
"100";"1000"
"200";""
"300";"0"
"400";NULL
200と300の行はともに0です。
処理としてはエディタかなにかで""をNULLに一括変換してから
投入すればいいでしょう。
回答ありがとうございました。
>空文字はNULLではありません
>囲み記号を「"」としてNULL値がOKでデフォルトがNULLのINT型フィールドにデータ投入するとき""は0ですね。
全然知りませんでした。
勉強になりましたー
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MySQLでデータベースにデータin...
-
【PHPとDBの連動】時刻表作成
-
csvをDBへ読み込んだら、NULLが...
-
出勤表の作り方
-
検索結果が多い時の分割(件数...
-
セレクト文について
-
php sqlite count 列数取得
-
テキストボックスに入れた内容...
-
JAVA SQLServerException 列名 ...
-
実行時エラー3131 FROM 句の構...
-
アラートでyes noを作りたいです。
-
SELECT文を発行して、ACCESSよ...
-
検索結果($_POST)が2ページ目...
-
Accessのテーブルへ複数の主キ...
-
PHP+PDO+MYSQL で実行されたSQ...
-
like検索の複数キーワードで、...
-
phpのエラーについてです
-
エラー3011
-
MySQLのINSERT時にたまに重複に...
-
phpでmysqlを使ってデータベー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MySQLでデータベースにデータin...
-
csvをDBへ読み込んだら、NULLが...
-
重複データをカウントするのに...
-
MySQLの一部を、計算した後に表...
-
PHPでデータベースに正しく入力...
-
Tableのカラムをボタン化するには
-
MySQLでの売上集計
-
phpPgAdminでテーブルが作成で...
-
MySQLの日付データについて
-
RFC822形式での日時の取得
-
すいません、質問をさせて下さい。
-
クイズ形式サイトの復習機能の構造
-
携帯サイト【PCからのアクセス...
-
プライベート機能の作成
-
セレクト文について
-
開始日と期間で終了日を求める...
-
phpの掲示板でレスがあったスレ...
-
構造を教えてください。
-
SQL CASE 文について
-
internal server error時の回避
おすすめ情報