sql >> Database teknologi >  >> RDS >> Oracle

Oracle skelner ikke mellem nul og tomme strenge?

Oracle er meget meget meget gammel.

Tilbage i 80's da det blev udviklet (og før der var nogen standarder), mente de, at det var en god idé, og givet dengang Oracle gemmer sine værdier, var det virkelig.

Sådan gør du Oracle gemmer data (taget fra dokumentationen ):

Ingen datatype gemmes i dataene, kun datalængden og selve dataene.

Hvis NULL forekommer mellem to kolonner med værdier, den er gemt som en enkelt byte, hvilket betyder, at kolonnen har længden 0 (faktisk 0xFF ). Efterfølgende NULL s gemmes slet ikke.

Så for at gemme værdien 'test' , Oracle skal gemme 5 bytes:04 74 65 73 74 .

Men for at gemme både en tom streng og en NULL , Oracle skal blot indstille datalængden til 0 .

Meget smart, hvis dine data skal gemmes på 20 Mb harddiske, der koster 5,000$ hver.

Senere, da standarderne dukkede op, var det ikke en god idé længere, men på det tidspunkt var der allerede masser af kode, der var afhængige af NULL og '' er det samme.

Opretter VARCHAR at gøre en sådan skelnen vil bryde tons af kode.

For at rette op på det, omdøbte de VARCHAR til VARCHAR2 (som ikke er en del af nogen standard), udtalte, at VARCHAR2 vil aldrig skelne mellem en NULL og en tom streng og opfordrede alle til at bruge denne datatype i stedet.

Nu venter de sandsynligvis på den sidste person, der brugte en VARCHAR i Oracle database til at dø.



  1. SQL GROUP BY CASE-sætning med aggregeret funktion

  2. mysqldump bedste praksis:Del 1 – MySQL-forudsætninger

  3. SQL Server-replikering kræver det faktiske servernavn for at oprette forbindelse til serveren

  4. FORALL-erklæring med nedre og øvre grænse i Oracle-databasen