sql >> Databáze >  >> RDS >> Oracle

Proč Oracle 9i považuje prázdný řetězec za NULL?

Věřím, že odpověď je, že Oracle je velmi, velmi starý.

V dávných dobách, než existoval standard SQL, učinil Oracle návrhové rozhodnutí, že vyprázdní řetězce v VARCHAR /VARCHAR2 sloupce byly NULL a že existoval pouze jeden smysl NULL (existují relační teoretici, kteří by rozlišovali mezi daty, která nikdy nebyla vyzvána, daty, kde odpověď existuje, ale uživatel ji nezná, daty, kde odpověď neexistuje atd. které představují určitý smysl NULL ).

V době, kdy se objevil standard SQL a souhlasil s tím, že NULL a prázdný řetězec byly odlišné entity, již existovali uživatelé Oracle, kteří měli kód, který předpokládal, že jsou tyto dvě ekvivalentní. Oracle tak v podstatě zbyly možnosti prolomit stávající kód, porušit standard SQL nebo zavést jakýsi inicializační parametr, který by změnil funkčnost potenciálně velkého množství dotazů. Porušení standardu SQL (IMHO) bylo z těchto tří možností nejméně rušivé.

Oracle nechal otevřenou možnost, že VARCHAR datový typ by se v budoucí verzi změnil, aby odpovídal standardu SQL (proto všichni používají VARCHAR2 v Oracle, protože je zaručeno, že chování tohoto datového typu zůstane do budoucna stejné).



  1. Jak objednávat podle data v PostgreSQL nebo Oracle

  2. JOIN dotazy vs. více dotazů

  3. Jak změnit formát data a času v MySQL

  4. Propojení PostgreSQL 9.2.1 s Hibernate