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.