元SE。田舎の公務員

通勤快足な生活をしながら、開発技術とウェイトコントロールについてつらつらと。。。

OracleとSQL ServerにおけるNULLと空文字、スペースの違い

NULLと同じように値がないことを表すのに空文字('')やスペース(' ')
これはRDBMSによってどの程度、動作に違いがあるのか?


■【Oracle
Oracleの場合、主要なデータ型のカラムに対し、空文字、スペースを挿入すると実際には以下の表のような値が登録される。

データ型空文字スペース
CHAR(固定長文字列)NULL定義長分のスペース
VARCHAR2(可変長文字列)NULLスペース
NUMBER(数値)NULLエラー
DATE(日時)NULLエラー

Oracleは空文字をNULLにしてしまうようだ。


■【SQL Server

データ型空文字スペース
CHAR(固定長文字列)空文字空文字
VARCHAR(可変長文字列)空文字空文字
INT(数値)00
DATETIME(日時)1900/01/01 00:00:001900/01/01 00:00:00
空文字もスペースも空文字として扱っている。
NULL≠空文字。

数値型や日時型に空文字が設定された場合、
Oracleのようにエラーにせず、勝手にそのデータ型の”値なし”の値を格納するようだ


気が利いてるのか?嫌がらせなのか?
ただ、どちらも、NULL、空文字、スペースを混同して使用すると誤った操作を誘発する可能性が高くなるのは間違いないでしょう。