みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

PHPとMYSQL、DBのデータが空の表現は0が良

こんばんは。
MYSQLではint型、varchar型、text型、smallint型、tinity型、float型で
データが無いことを表すのはnullでも構わないですよね。

そのときPHPでMYSQLからデータを受け取ってデータが空かどうかを区別するには、
if(!a==null){}のようにnullを使うことになります。
PHPでnullを扱うのはトラブルの元になると参考書に書いてありました。

そういうときは、MYSQLでnullじゃなくて0が一番無難でしょうか。
また、0よりも半角文字や「データ無」のようにするべきですか。

投稿日時 - 2012-06-26 00:38:09

QNo.7555426

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

>MYSQLではint型、varchar型、text型、smallint型、tinity型、float型で

>そういうときは、MYSQLでnullじゃなくて0が一番無難でしょうか。
>また、0よりも半角文字や「データ無」のようにするべきですか。

数値型は集計する前提なのでNULLを利用するのが妥当です。
ただしNULL値が多いと想定される場合はテーブル構成を
変えてJOINして使う方が効率的です

文字列型はNULL文字が必ずしも妥当ではないので""で処理した方が
よいかもしれません。

また言語によってとくにPHPなどはデータ比較を柔軟に行うことがあり
NULL、0、""、false、"0"などをあいまいに同値として処理するケースがあります。
NULLをつかうのであれば厳密にデータを比較することをお勧めします

投稿日時 - 2012-06-26 11:04:38

ANo.1

時と場合による。
例えばテストの点数なんかをDBに格納したとしましょう。
この場合0は0点ですが、テストを受けなかった人が0点ではまずいでしょ。
テストを受けなかった人は点数なしに設定しておく必要があるでしょ。
(この場合、nullではなくてテストの点数としてあり得ない-1をデータなしとして扱うなども出来ます。)

またtext型に関してもnullでなくて""の様に空文字を入れておくことが出来ます。(nullと空文字は別物です。)

ちなみに
>if(!a==null){}のようにnullを使うことになります。
これはあまりいただけない比較の方法。
nullの比較はis_null()関数を使いなさい。
それと数値型の比較以外で「==」は使わないこと。(===や対応している関数があるならそれを利用すること)

>データを受け取ってデータが空かどうかを区別するには
空文字とnullは別物。

とこんな感じだけど質問者はDBに手を出す前にPHPの基本を理解していない。

投稿日時 - 2012-06-26 01:31:39

あなたにオススメの質問