sql >> Database >  >> RDS >> Oracle

Waarom behandelt Oracle 9i een lege string als NULL?

Ik geloof dat het antwoord is dat Oracle heel, heel oud is.

Vroeger, voordat er een SQL-standaard was, nam Oracle de ontwerpbeslissing om strings in VARCHAR leeg te maken /VARCHAR2 kolommen waren NULL en dat er slechts één gevoel van NULL was (er zijn relationele theoretici die onderscheid zouden maken tussen gegevens waar nooit om is gevraagd, gegevens waarvan het antwoord bestaat maar niet bekend is bij de gebruiker, gegevens waar er geen antwoord is, enz. die een gevoel van NULL . vormen ).

Tegen de tijd dat de SQL-standaard rondkwam en ermee instemde dat NULL en de lege string waren verschillende entiteiten, er waren al Oracle-gebruikers die code hadden die aannam dat de twee equivalent waren. Dus bleef Oracle in feite over met de opties om bestaande code te breken, de SQL-standaard te schenden of een soort initialisatieparameter in te voeren die de functionaliteit van een potentieel groot aantal query's zou veranderen. Het schenden van de SQL-standaard (IMHO) was de minst storende van deze drie opties.

Oracle heeft de mogelijkheid opengelaten dat de VARCHAR gegevenstype zou in een toekomstige release veranderen om te voldoen aan de SQL-standaard (daarom gebruikt iedereen VARCHAR2 in Oracle, aangezien het gedrag van dat gegevenstype gegarandeerd hetzelfde blijft in de toekomst).



  1. Basisprincipes van SQL Server ALTER TABLE-instructie

  2. JSON_TYPE() - Krijg een JSON-waardetype in MySQL

  3. PostgreSQL versus MySQL:wat is het beste?

  4. android.database.CursorIndexOutOfBoundsException