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

Oracle nerozlišuje mezi nulami a prázdnými řetězci?

Oracle je velmi velmi starý.

Zpátky v 80's když to bylo vyvinuto (a předtím, než existovaly nějaké standardy), mysleli si, že je to dobrý nápad, a dali to tak Oracle ukládá své hodnoty, skutečně to tak bylo.

Zde je návod, jak Oracle ukládá data (převzato z dokumentace ):

V datech není uložen žádný datový typ, pouze délka dat a samotná data.

Pokud je NULL vyskytuje se mezi dvěma sloupci s hodnotami, je uložen jako jeden bajt, což znamená, že sloupec má délku 0 (ve skutečnosti 0xFF ). Koncová NULL s nejsou vůbec uloženy.

Takže pro uložení hodnoty 'test' , Oracle potřebuje uložit 5 bajtů:04 74 65 73 74 .

Chcete-li však uložit jak prázdný řetězec, tak NULL , Oracle stačí nastavit délku dat na 0 .

Velmi chytré, pokud mají být vaše data uložena na 20 Mb pevné disky, které stojí 5,000$ každý.

Později, když se objevily standardy, už to nebyl tak dobrý nápad, ale v té době již existovalo mnoho a spousta kódu, který se spoléhal na NULL a '' být to samé.

Vytváření VARCHAR udělat takové rozlišení rozbije tuny kódu.

Aby to napravili, přejmenovali VARCHAR na VARCHAR2 (který není součástí žádného standardu), uvedl, že VARCHAR2 nikdy rozlišovat mezi NULL a prázdný řetězec a vyzval všechny, aby místo toho používali tento datový typ.

Nyní pravděpodobně čekají na poslední osobu, která použila VARCHAR v Oracle databáze zemřít.



  1. Jak může vaše malá firma těžit z cloud computingu

  2. pracovat s json v oracle

  3. EM 12c Úprava prahových hodnot

  4. Jak provést synchronizaci s místní databází a analyzovat?