239

多くの異なるフィールドを持つ Web サイトにフォームがあります。一部のフィールドはオプションですが、一部は必須です。私のDBには、これらすべての値を保持するテーブルがあります。ユーザーがデータを入力しなかったDB列にNULL値または空の文字列を挿入することをお勧めしますか?

4

6 に答える 6

226

を使用NULLすることで、「データを入れない」と「空のデータを入れる」を区別できます。

その他の違い:

  • LENGTHは、空の文字列の はNULLです。NULLLENGTH0

  • NULLs は空の文字列の前にソートされます。

  • COUNT(message)空の文字列はカウントしますが、NULLsはカウントしません

  • バインドされた変数を使用して空の文字列を検索できますが、NULL. このクエリ:

    SELECT  *
    FROM    mytable 
    WHERE   mytext = ?
    

    クライアントから渡された値が何であれ、 NULLinと一致することはありません。mytextsを一致NULLさせるには、他のクエリを使用する必要があります。

    SELECT  *
    FROM    mytable 
    WHERE   mytext IS NULL
    
于 2009-08-12T18:50:30.363 に答える
46

データベースの切り替えを計画している場合に考慮すべきことの 1 つは、 Oracle が空の文字列をサポートしていないことです。これらは自動的に NULL に変換され、 のような句を使用してそれらを照会することはできませんWHERE somefield = ''

于 2009-08-12T18:59:37.210 に答える
10

心に留めておくべきことの 1 つは、NULL を使用するとコードパスが非常に難しくなる可能性があるということです。たとえば Python では、ほとんどのデータベース アダプタ / ORMNULLNone.

次のようなもの:

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

これにより、物事がはるかに複雑になる可能性があります。

于 2009-08-12T19:08:39.903 に答える
9

NULLMySQL のデータベースに一貫性を持たせるために挿入することをお勧めします。外部キーは空の文字列として保存できますがNULL、空の文字列として保存することはできません。

制約に空の文字列があると問題が発生します。外部キー制約を満たすために、一意の空の文字列を持つ偽のレコードを挿入する必要がある場合があります。悪い習慣だと思います。

参照:外部キーは NULL および/または重複できますか?

于 2016-10-20T07:43:59.670 に答える
6

ここでどのようなベスト プラクティスが得られるかはわかりませんが、null が空文字列とは異なる意味を持ち、ユーザーの入力が空文字列の定義と一致しない限り、通常は null を優先します。

あなたがそれらをどのように変えたいかを定義する必要があると言っていることに注意してください。それらを異なるものにすることが理にかなっている場合もあれば、そうでない場合もあります。そうでない場合は、いずれかを選択してそれを使い続けてください。私が言ったように、私はほとんどの場合 NULL を好む傾向があります。

ああ、列が null の場合、その列に基づいて選択する (SQL 用語では where 句がある) 実質的にすべてのクエリにレコードが表示される可能性は低くなります。ただし、選択が null 列の場合を除きます。もちろん。

于 2009-08-12T18:53:26.393 に答える