多くの異なるフィールドを持つ Web サイトにフォームがあります。一部のフィールドはオプションですが、一部は必須です。私のDBには、これらすべての値を保持するテーブルがあります。ユーザーがデータを入力しなかったDB列にNULL値または空の文字列を挿入することをお勧めしますか?
6 に答える
を使用NULL
することで、「データを入れない」と「空のデータを入れる」を区別できます。
その他の違い:
の
LENGTH
は、空の文字列の はNULL
です。NULL
LENGTH
0
NULL
s は空の文字列の前にソートされます。COUNT(message)
空の文字列はカウントしますが、NULL
sはカウントしませんバインドされた変数を使用して空の文字列を検索できますが、
NULL
. このクエリ:SELECT * FROM mytable WHERE mytext = ?
クライアントから渡された値が何であれ、
NULL
inと一致することはありません。mytext
sを一致NULL
させるには、他のクエリを使用する必要があります。SELECT * FROM mytable WHERE mytext IS NULL
データベースの切り替えを計画している場合に考慮すべきことの 1 つは、 Oracle が空の文字列をサポートしていないことです。これらは自動的に NULL に変換され、 のような句を使用してそれらを照会することはできませんWHERE somefield = ''
。
心に留めておくべきことの 1 つは、NULL を使用するとコードパスが非常に難しくなる可能性があるということです。たとえば Python では、ほとんどのデータベース アダプタ / ORMNULL
がNone
.
次のようなもの:
print "Hello, %(title)s %(firstname) %(lastname)!" % databaserow
「Hello, None Joe Doe!」という結果になる可能性があります。それを避けるには、次のようなコードが必要です。
if databaserow.title:
print "Hello, %(title)s %(firstname) %(lastname)!" % databaserow
else:
print "Hello, %(firstname) %(lastname)!" % databaserow
これにより、物事がはるかに複雑になる可能性があります。
NULL
MySQL のデータベースに一貫性を持たせるために挿入することをお勧めします。外部キーは空の文字列として保存できますがNULL
、空の文字列として保存することはできません。
制約に空の文字列があると問題が発生します。外部キー制約を満たすために、一意の空の文字列を持つ偽のレコードを挿入する必要がある場合があります。悪い習慣だと思います。
ここでどのようなベスト プラクティスが得られるかはわかりませんが、null が空文字列とは異なる意味を持ち、ユーザーの入力が空文字列の定義と一致しない限り、通常は null を優先します。
あなたがそれらをどのように変えたいかを定義する必要があると言っていることに注意してください。それらを異なるものにすることが理にかなっている場合もあれば、そうでない場合もあります。そうでない場合は、いずれかを選択してそれを使い続けてください。私が言ったように、私はほとんどの場合 NULL を好む傾向があります。
ああ、列が null の場合、その列に基づいて選択する (SQL 用語では where 句がある) 実質的にすべてのクエリにレコードが表示される可能性は低くなります。ただし、選択が null 列の場合を除きます。もちろん。