Oracle
es muy muy muy viejo.
En los 80's
cuando se desarrolló (y antes de que existieran estándares) pensaron que era una buena idea, y dieron paso a Oracle
almacena sus valores, realmente lo fue.
Así es como Oracle
almacena datos (tomados de la documentación ):
No se almacena ningún tipo de datos dentro de los datos, solo la longitud de los datos y los datos mismos.
Si NULL
ocurre entre dos columnas con valores, se almacena como un solo byte, lo que significa que la columna tiene una longitud 0
(en realidad, 0xFF
). NULL
final Los correos electrónicos no se almacenan en absoluto.
Entonces, para almacenar el valor 'test'
, Oracle
necesita almacenar 5 bytes:04 74 65 73 74
.
Sin embargo, para almacenar tanto una cadena vacía como un NULL
, Oracle
solo necesita establecer la longitud de los datos en 0
.
Muy inteligente si sus datos se almacenarán en 20 Mb
discos duros que cuestan 5,000$
cada uno.
Más tarde, cuando aparecieron los estándares, ya no era una buena idea, pero en ese momento ya había montones, montones de código que se basaban en NULL
y ''
siendo lo mismo.
Haciendo VARCHAR
hacer tal distinción romperá toneladas de código.
Para solucionarlo, cambiaron el nombre de VARCHAR
a VARCHAR2
(que no forma parte de ningún estándar), declaró que VARCHAR2
nunca distinguir entre un NULL
y una cadena vacía e instó a todos a usar este tipo de datos en su lugar.
Ahora probablemente estén esperando a la última persona que usó un VARCHAR
en Oracle
base de datos para morir.