Oracle
è molto molto molto vecchio.
Di nuovo negli 80's
quando è stato sviluppato (e prima che esistessero degli standard) hanno pensato che fosse una buona idea, e poi hanno dato il via a Oracle
memorizza i suoi valori, lo era davvero.
Ecco come Oracle
memorizza i dati (presi dalla documentazione ):
Nessun tipo di dati viene memorizzato all'interno dei dati, solo la lunghezza dei dati e i dati stessi.
Se il NULL
si verifica tra due colonne con valori, è memorizzato come un singolo byte, il che significa che la colonna ha lunghezza 0
(in realtà, 0xFF
). NULL
finale i messaggi non vengono affatto memorizzati.
Quindi per memorizzare il valore 'test'
, Oracle
deve memorizzare 5 byte:04 74 65 73 74
.
Tuttavia, per memorizzare sia una stringa vuota che un NULL
, Oracle
deve solo impostare la lunghezza dei dati su 0
.
Molto intelligente se i tuoi dati devono essere archiviati su 20 Mb
dischi rigidi che costano 5,000$
ciascuno.
Più tardi, quando sono apparsi gli standard, non era più una buona idea, ma a quel punto c'era già un sacco di codice che si basava su NULL
e ''
essere la stessa cosa.
Fare VARCHAR
fare una tale distinzione spezzerà tonnellate di codice.
Per risolverlo, hanno rinominato VARCHAR
a VARCHAR2
(che non fa parte di nessuno standard), ha affermato che VARCHAR2
mai distinguere tra un NULL
e una stringa vuota e ha invitato tutti a utilizzare invece questo tipo di dati.
Ora stanno probabilmente aspettando l'ultima persona che ha usato un VARCHAR
in Oracle
database a morire.