
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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- MySQL `picture` varchar(255) のコマンドで間違いないでしょうか? 1 2022/11/21 04:08
- MySQL 何にかが違うから エラーなんでしょうね! 2 2022/09/18 05:28
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php エラー 2 2022/10/23 16:43
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MySQLでデータベースにデータin...
-
重複データをカウントするのに...
-
PHPでPostgreSQLのテーブルを表...
-
変数にNULLを代入したい
-
エクセルをMysqlに格納
-
PHPの記述でSQLiteのテーブルに...
-
csvからの取込み
-
DB Error: no such field
-
Accessのテーブルへ複数の主キ...
-
php ログインID別 ページ表示
-
insert1つの処理でもトランザ...
-
データベースに存在するデータ...
-
PEAR でprepareメソッドがエラーに
-
[PHP+MySQL] データをランダム...
-
VBAをつかってクエリの情報を抽...
-
Resource id #3 をフィールドの...
-
XAMPPで画面が真っ白になります。
-
ODBC接続でデータ件数を求...
-
チェックボックスからの複数検...
-
PHPのプルダウンメニューにDBの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MySQLでデータベースにデータin...
-
csvをDBへ読み込んだら、NULLが...
-
DB Error: no such field
-
Accessへ日付をINSERT
-
変数にNULLを代入したい
-
カラムにデータがあるかないか...
-
phpでテーブルを作る際変数によ...
-
どちらが高速ですか?
-
日またぎの計算
-
登録したデータを県別に並び替...
-
PHP prepare フィールド名をエ...
-
クエリObjectをforeachで回す時...
-
MYSQLのTRUNCATE TABLE
-
トランザクション処理
-
PHP while~mysqli_fetch_assoc
-
php sqlite count 列数取得
-
SQL CASE 文について
-
access → Oracleへのデータ移...
-
ヒアドキュメントでSQLを書く事...
-
掲示板ユーザのアクセス権
おすすめ情報