sql >> Databasteknik >  >> RDS >> Oracle

Varför behandlar Oracle 9i en tom sträng som NULL?

Jag tror att svaret är att Oracle är väldigt, väldigt gammalt.

Förr i tiden innan det fanns en SQL-standard tog Oracle designbeslutet att tömma strängar i VARCHAR /VARCHAR2 kolumner var NULL och att det bara fanns en känsla av NULL (det finns relationsteoretiker som skulle skilja mellan data som aldrig har efterfrågats, data där svaret finns men inte är känt av användaren, data där det inte finns något svar, etc. alla som utgör någon känsla av NULL ).

När SQL-standarden kom fram och gick med på att NULL och den tomma strängen var distinkta enheter, det fanns redan Oracle-användare som hade kod som antog att de två var likvärdiga. Så Oracle lämnades i princip med alternativen att bryta befintlig kod, bryta mot SQL-standarden eller införa någon form av initialiseringsparameter som skulle ändra funktionaliteten för ett potentiellt stort antal frågor. Att bryta mot SQL-standarden (IMHO) var det minst störande av dessa tre alternativ.

Oracle har lämnat öppen möjligheten att VARCHAR datatypen skulle ändras i en framtida version för att följa SQL-standarden (det är därför alla använder VARCHAR2 i Oracle eftersom den datatypens beteende garanterat kommer att förbli detsamma framöver).



  1. Hur visar man alla privilegier från en användare i Oracle?

  2. Oracle Skillnader mellan NVL och Coalesce

  3. Hur jämför man två databasobjekt i Oracle?

  4. Hur kan jag fråga ett värde i SQL Server XML-kolumnen