phpMyAdmin:CSVインポートでNULLを入れる方法

phpMyAdmin:CSVインポートでNULLを入れる方法

MYSQLにCSVインポートでNULLを入れる方法

PHP使いのMYSQLクライアントツールと言えばphpMyAdminが定番ですよね。

今回も私の失敗談からの備忘録。「CSVでNULL入らねーじゃねーか」の解決編となります。

商品情報の検索システムが完成し、実データを入れてやろうとデータを作成しました。
データ作成ツールはExcel。その為、値の入っていないカラムは通常【空白】で処理されます。
MYSQLのカラムをINTで作成した場合「空白はINTじゃねーぞ!」と怒られインポートはエラーとなります。
その為、NULLで処理させたいデータには何某かのマークが必要となります。

失敗した理由

実に単純です。

NULL を入れたいカラムに Null を入れていた。

適当に記憶しているからこんな間違いするんですよね。CSVインポート時の正解は【NULL】です。

普段データを管理している際は見やすさからNullと表記しているので癖がついているのでしょう。
単純な間違いほど気づき難いんですよね。

NULLを設定する方法

NULL以外にやり方は沢山あります。
ただし、中途半端に覚えているとやはりエラーと叱られてしまいます。

以下、数値カラムへのインポートでの動作をまとめます。

インポート値 動作結果 理由
NULL OK NULLとして認識処理される
Null エラー 文字 ’Null’ と認識される
\N エラー 改行と認識されるが数値カラムで利用した場合エラーとなる
,(空), エラー 数値を記載するところに値が無い為エラーとなる

【INSERT エラーで中断しない】にチェックを入れれば 空 の値でもNULLとして処理してくれますが、例えば桁数オーバーとか全角数字で文字として入ってたとか、止めて欲しいエラーも無視して実行してしまう為、おすすめはできません。

Excelの空白カラムに一気にNULLを記載する方法

手順は超簡単です。

  1. 空白カラムがある状態で、NULLを入れたい列を選択
  2. 【Ctrl + F】で検索と置換を呼び出す
  3. 置換タブをクリック
  4. 検索する文字列を空白のままにする
  5. 置換後の文字列にNULLを記入
  6. 【すべて置換】ボタンをクリック

これで空白カラムに一気にNULLが入ります。

NULLが多い場合は設計の見直しも検討する

NULLが多い事はDB設計上あまり褒められたものではありません。

「もっと圧縮できんじゃね?」ってやつですね。

項目数が多くNULLが多いテーブルが存在している場合はテーブルを分割した方がいいかもしれません。

また、NULLではなく値を入れてプログラム側でスキップさせる設計もあります。

例えば商品サイズなど、Amazonの仕様に合わせて【縦,横,高さ】とカラムを分けたとします。でも、メーカーから提供された商品情報には縦横のみしかない。こんな時にあえてNULLを認めず高さに【0】を入れ、システム側で @if($高さ !== 0) とすれば簡単にスキップ処理が出来ます。

利点は入力される値にばらつきが無い事。
『空白の処理は0』とすればNULLや0が共存しない環境が構築できます。

まとめ

大文字小文字には要注意!phpMyAdminのCSVインポートは【NULL】です。Nullでもnullでもありません!