Oracle
est très très très vieux.
De retour dans les 80's
quand il a été développé (et avant qu'il n'y ait de normes), ils ont pensé que c'était une bonne idée, et ont ensuite utilisé Oracle
stocke ses valeurs, c'était vraiment le cas.
Voici comment Oracle
stocke les données (extraites de la documentation ):
Aucun type de données n'est stocké dans les données, uniquement la longueur des données et les données elles-mêmes.
Si le NULL
se produit entre deux colonnes avec des valeurs, il est stocké sous la forme d'un seul octet, ce qui signifie que la colonne a une longueur 0
(en fait, 0xFF
). NULL
de fin s ne sont pas stockés du tout.
Donc pour stocker la valeur 'test'
, Oracle
doit stocker 5 octets :04 74 65 73 74
.
Cependant, pour stocker à la fois une chaîne vide et un NULL
, Oracle
il suffit de définir la longueur des données sur 0
.
Très malin si vos données doivent être stockées sur 20 Mb
des disques durs qui coûtent 5,000$
chacun.
Plus tard, lorsque les normes sont apparues, ce n'était plus une si bonne idée, mais à ce moment-là, il y avait déjà beaucoup de code reposant sur NULL
et ''
étant la même chose.
Création de VARCHAR
faire une telle distinction va casser des tonnes de code.
Pour résoudre ce problème, ils ont renommé VARCHAR
à VARCHAR2
(qui ne fait partie d'aucune norme), a déclaré que VARCHAR2
ne sera jamais distinguer un NULL
et une chaîne vide et a exhorté tout le monde à utiliser ce type de données à la place.
Maintenant, ils attendent probablement la dernière personne qui a utilisé un VARCHAR
dans Oracle
base de données à mourir.