Oracle
é muito muito muito velho. De volta aos
80's
quando foi desenvolvido (e antes de haver quaisquer padrões) eles acharam que era uma boa ideia, e então deram o caminho Oracle
armazena seus valores, realmente era. Veja como o
Oracle
armazena dados (retirados da documentação ):Nenhum tipo de dados é armazenado nos dados, apenas o comprimento dos dados e os próprios dados.
Se o
NULL
ocorre entre duas colunas com valores, é armazenado como um único byte, o que significa que a coluna tem comprimento 0
(na verdade, 0xFF
). À direita de NULL
s não são armazenados. Então, para armazenar o valor
'test'
, Oracle
precisa armazenar 5 bytes:04 74 65 73 74
. No entanto, para armazenar uma string vazia e um
NULL
, Oracle
só precisa definir o comprimento dos dados para 0
. Muito inteligente se seus dados forem armazenados em
20 Mb
discos rígidos que custam 5,000$
cada. Mais tarde, quando os padrões apareceram, não era mais uma boa ideia, mas naquela época já havia muitos e muitos códigos contando com
NULL
e ''
sendo a mesma coisa. Fazendo
VARCHAR
fazer essa distinção quebrará toneladas de código. Para corrigi-lo, eles renomearam
VARCHAR
para VARCHAR2
(que não faz parte de nenhum padrão), afirmou que VARCHAR2
será nunca distinguir entre um NULL
e uma string vazia e pediu a todos que usassem esse tipo de dados. Agora eles provavelmente estão esperando pela última pessoa que usou um
VARCHAR
em Oracle
banco de dados para morrer.