Oracle Databaseでは空文字がNULLと等価として扱われる

良く知られた内容なのかもしれないが、MySQLやpostgreSQLなど他のRDBMSを触っているとびっくりする仕様。ちゃんと最新版の12cのドキュメントにも記載されている。

Oracle Databaseは、長さが0(ゼロ)の文字値をNULLとして処理します。ただし、NULLは値0(ゼロ)と同じではないため、0(ゼロ)の数値を表すためにNULL値を使用しないでください。

注意事項として次の内容も記載されている。

この処理はOracleの今後のバージョンでも継続されるとはかぎらないため、空の文字列をNULLとして処理しないことをお薦めします。

困るのがnot null属性が設定されている(例えば主キーを設定している)項目に空文字が入れられないこと。採用するデータベースの種類に依存しない設計をしようとしたら、主キーに文字列型を含むような設計をすべきではないといったところだろうか。(そもそもインデックスを設定される場合も不利に働くのだろうし、正規化を前提とした場合、設計が適切ではないのかもしれない)

参考)

SHIFT the Oracle 長さ0の文字列

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です