空、Null、およびNullではないデータベースフィールドの値について、私は多くのことを混乱させています。いくつかのフィールドに空/空白のデータが含まれているタブがあり、そのうちのいくつかには NULL データが含まれており、実際のデータが含まれています。Epmyt/Blank と Null データの違いがわかりません。
私を助けてください。
ありがとうラヴィク
空、Null、およびNullではないデータベースフィールドの値について、私は多くのことを混乱させています。いくつかのフィールドに空/空白のデータが含まれているタブがあり、そのうちのいくつかには NULL データが含まれており、実際のデータが含まれています。Epmyt/Blank と Null データの違いがわかりません。
私を助けてください。
ありがとうラヴィク
空または空白は通常、空の文字列値、長さ = 0 文字を指します。Null は値がないことを意味し、空の値であってもありません。
NULL は、データベース内の値が欠落しているか不確定であることを示すデータベース インジケータです。空の文字列は、長さゼロの varchar 文字列です。
値を選択するとき、それらは同じである場合と異なる場合があります。たとえば、SQL Server Management Studio は、NULL 値を空白文字列ではなく "NULL" としてエクスポートします。
NULL は、多くの人が直観に反すると考えるいくつかの非常に基本的な比較規則に従います。を除くすべての比較操作is null
は false を返します。特に、次の 2 つは false を返します。
where NULL = NULL
where NULL <> NULL
これは、NULL 値を持つ列にも適用されるため、NULL 値がval
含まれている場合、これらは両方とも false を返します。
where val = val
where val <> val
空白/空の文字列は、長さが 0 の可変長文字列の値であり、通常は '' で表されます。以下は true を返します。
where '' = ''
where val = val -- given that val is ''
1 つの問題は、一部のデータベースが NULL 値を長さ 0 の文字列として扱うことです。オラクルが思い浮かびます。ただし、これは ANSI 準拠の動作ではありません。
NULL は空の値とは異なります。NULL を使用すると、値が空かどうかが確実にわかりません。これは、データベースに実際に測定可能な影響を与えます。ここではいくつかの例を示します。
空のLEN()
varchar フィールドの は 0 です。NULLLEN()
フィールドの はまだ NULL です... フィールドの大きさはわかりません。
それ自体と比較した 2 つの空のフィールド ( '' = ''
) は true です。2 つの NULL フィールドが等しいかどうかわからないので、( NULL = NULL
) は NULL になります。
空のフィールドのCOALESCE('', ... )
は、空のフィールドになります。COALESCE(NULL, ... )
NULL フィールドの は、次の値にフォールスルーします。
このような例は他にもたくさんあります。NULL は空を意味しません。NULL は「わからない」を意味します。