• ベストアンサー

空文字の意義

どうして、sqlserverには、空文字が存在するのでしょうか? oracleには、空文字は存在せず、すべてnull値として扱ってくれて非常に、わかりやすいです。 他にも、マイクロソフトの製品(Access,やvbの変数)は、空文字を扱っていますが、空文字を扱うとは、何かメリットあるのでしょうか? わたしは、プログラマーですが、うっとうしくてほかなりません。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

Oracle以外の主要なRDBMSは、空文字は有効な値、nullは不定な値です。 標準SQLも、後者です。 >oracleには、空文字は存在せず、すべてnull値として扱ってくれて非常に、わかりやすいです。 これはOracle以外のRDBMS利用者には、非常に紛らわしい仕様です。 標準SQLや多くのRDBMSの常識では、nullは「列名 is null」、「列名 is not null」でしかヒットしません。ところが、Oracleの場合、「列名=''」でもヒットしてしまいます。

androp
質問者

お礼

ご丁寧にありがとうございます

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

たしかにプログラミングする立場からは使える値が入っていないという意味では同じなので分けている意味がわからないという感じなんでしょうね。 コンセプトの違いで優劣などはもちろんないのですが、 データ管理の視点では、NULLは「未定」、空文字は「決定(=明示的にないことを示す)」で区別して管理できるということだと思います。 結果、メンテナンス対象フィールドだと認識した場合、一律NOT NULL制約を掛けますし、必要があれば複合プライマリキーの要素としても使います。 おまけで、Oracleでは A || B はどちらかがNULL値でも値は残りますが、SQL Serverでは残らないので、それを利用してこんなこともします。 declare @t varchar(max); select @t=isnull(@t+',','')+Field1 from TableA; select @t;

androp
質問者

お礼

ご丁寧にありがとうございます

すると、全ての回答が全文表示されます。

関連するQ&A