it-swarm-eu.dev

Jaký je rozdíl mezi datovými typy Oracle VARCHAR a VARCHAR2?

Při migraci tabulek přicházejících z jiných DBMS do Oracle je jedním ze standardních úkolů nahradit všechna pole VARCHAR(n) pole VARCHAR2(n) field (za předpokladu n <= 4000) .

Proč Oracle nazývá tento datový typ VARCHAR2 a nejen VARCHAR jako jiné DBMS?

19
bernd_k

Zdá se, že Oracle měl současně v plánu dát jinou definici [~ # ~] varchar [~ # ~] než to VARCHAR2. Řekla to zákazníkům a nedoporučuje používat [~ # ~] varchar [~ # ~]. Ať už byly jejich plány jakékoli, k 11.2.0.2 [~ # ~] varchar [~ # ~] je totožné s VARCHAR2. Zde je to, co SQL Language Reference 11g Release 2 říká:

Nepoužívejte datový typ VARCHAR. Místo toho použijte datový typ VARCHAR2. Přestože datový typ VARCHAR je v současné době synonymem pro VARCHAR2, je naplánováno, že datový typ VARCHAR bude předefinován jako samostatný datový typ používaný pro řetězce znaků s proměnnou délkou ve srovnání s různými sémantickými srovnáváními.

PL/SQL User's Guide and Reference 10g Release 2 to uvádí takto:

V současné době je VARCHAR synonymem pro VARCHAR2. Avšak v budoucích verzích PL/SQL, aby se přizpůsobily vznikajícím standardům SQL, se VARCHAR může stát samostatným datovým typem s odlišnou sémantikou porovnání. Je vhodné používat spíše VARCHAR2 než VARCHAR.

Dokument Database Concepts 10g Release 2 říká totéž silněji:

Datový typ VARCHAR je synonymem s datovým typem VARCHAR2. Chcete-li se vyhnout možným změnám v chování, vždy použijte datový typ VARCHAR2 k uložení řetězců znaků s proměnnou délkou.

Dokumentace Oracle 9.2 a 8.1.7 říkají v zásadě totéž, takže i když Oracle neustále brání použití [~ # ~] varchar [~ # ~], zatím to tak není udělal cokoli, aby změnil svou paritu pomocí VARCHAR2.

26
Leigh Riffel

V současné době jsou oba synonyma.

VARCHAR je standardní datový typ ANSI, ale implementace datového typu VARCHAR společností Oracle porušuje standard ANSI tím, že prázdný řetězec považuje za NULL (implementace Oracle předchází standardu ANSI). Jak Leigh zdůrazňuje, Oracle uvedl, že sémantika datového typu VARCHAR se může v budoucnu změnit s ohledem na to, jak se s prázdným řetězcem zachází. Pokud k tomu dojde, sémantika datového typu VARCHAR2 zůstane stejná. Používání datového typu VARCHAR2 je bezpečnější, protože si nemusíte dělat starosti, že některá budoucí verze Oracle poruší váš kód tím, že způsobí, že prázdné řetězce již nebudou považovány za NULL.

25
Justin Cave

Protože v původním standardu SQL byl VARCHAR 255 znaků a Oracle v těchto dnech měl alespoň bodnutí v souladu s normami.

3
Gaius