1. ホーム
  2. sql

[解決済み] [Solved] Oracle 9iはなぜ空の文字列をNULLとして扱うのですか?

2022-04-05 05:09:33

質問

私はそれを知っている を行います。 を ' と見なします。 NULL しかし、これだけでは なぜ ということになります。 私が理解しているSQLの仕様では、' 'は、' 'と同じではありません。 NULL -- 一方は有効なデータで、もう一方はその同じ情報がないことを示すものです。

推測は自由ですが、そうであればご指摘ください。 オラクルからコメントできる人がいれば、それは素晴らしいことです。

どのように解決するのですか?

その答えは、Oracleがとてもとても古いからだと思います。

その昔、標準SQLがなかった頃、Oracleは、空文字列の VARCHAR / VARCHAR2 の列は NULL であり、NULLの意味は1つだけである(関係理論家は、一度も入力が促されたことのないデータ、答えは存在するがユーザが知らないデータ、答えが存在しないデータなどを区別しており、これらはすべて何らかの意味で NULL ).

標準SQLが登場し、以下のような合意がなされるまでに。 NULL と空文字列は別物であるとするコードを持つOracleユーザが既に存在していたのです。 そのため、オラクルは基本的に、既存のコードを壊すか、標準SQLに違反するか、ある種の初期化パラメータを導入して潜在的に多くのクエリの機能を変更するかという選択肢に迫られました。 標準SQLに違反することは(IMHO)、これら3つのオプションのうち最も破壊的でないものでした。

オラクルは VARCHAR のデータ型は、将来のリリースで標準SQLに準拠するように変更される可能性があります(そのため、誰もが VARCHAR2 のデータ型の動作は今後も変わらないことが保証されているので、Oracleで使用することができます)。