Was ist der Unterschied zwischen den VARCHAR- und VARCHAR2 -Datentypen von Oracle?

dba.stackexchange https://dba.stackexchange.com/questions/1301

  •  16-10-2019
  •  | 
  •  

Frage

Bei der Migration von Tabellen von anderen DBMS zu Oracle ist eine der Standardaufgaben zu alles ersetzen VARCHAR(n) Felder mit VARCHAR2(n) Felder (bereitgestellt n <= 4000).

Warum nennt Oracle diesen Datenatyp? VARCHAR2 Und nicht nur VARCHAR Wie andere DBMSS?

War es hilfreich?

Lösung

Es scheint, dass Oracle einmal Pläne hatte, eine andere Definition zu geben Varchar als zu Varchar2. Es hat den Kunden dies mitgeteilt und empfiehlt gegen die Verwendung Varchar. Was auch immer ihre Pläne waren, ab 11.2.0.2 Varchar ist identisch mit Varchar2. Hier ist was Die SQL Language Reference 11g Release 2 sagt:

Verwenden Sie den VARCHAR -Datentyp nicht. Verwenden Sie stattdessen den VARCHAR2 -Datentyp. Obwohl der VARCHAR-Datentyp derzeit mit Varchar2 synonym ist, ist der VARCHAR-Datentyp als separate Datentyp für Zeichenzeichenfolgen variabler Länge im Vergleich zu unterschiedlichen Vergleichssemantik neu definiert.

Das PL/SQL -Benutzerhandbuch und Referenz 10G Release 2 Setzt es so aus:

Derzeit ist VARCHAR -Synonym für VARCHAR2. In zukünftigen Releases von PL/SQL, um aufkommende SQL -Standards aufzunehmen, kann VARCHAR jedoch zu einem separaten Datentyp mit unterschiedlichen Vergleichsemantik werden. Es ist eine gute Idee, Varchar2 und nicht VARCHAR zu verwenden.

Das Datenbankkonzepte 10G Release 2 Das Dokument sagt dasselbe in stärkeren Worten:

Der VARCHAR -Datenatyp ist ein Synonym für den VARCHAR2 -Datentyp. Um mögliche Verhaltensänderungen zu vermeiden, verwenden Sie immer den VARCHAR2-Datentyp, um Zeichenzeichen für variable Länge zu speichern.

Die Dokumentation von Oracle 9.2 und 8.1.7 sagen im Wesentlichen dasselbe, obwohl Oracle die Verwendung von ständig entmutigt Varchar, Bisher haben sie nichts unternommen, um es zu ändern, mit der Parität ist Varchar2.

Andere Tipps

Derzeit sind die beiden synonym.

Varchar ist ein ANSI -Standard -Datentyp, aber die Implementierung des Varchar -Datentyps durch Oracle verstößt gegen den ANSI -Standard, indem er die leere Zeichenfolge als null betrachtet (Oracle -Implementierung leckt den ANSI -Standard). Wie Leigh betont, hat Oracle erklärt, dass sich die Semantik des VARCHAR -Datentyps in Zukunft in Bezug auf die Behandlung der leeren Zeichenfolge ändern kann. In diesem Fall bleibt die Semantik des VARCHAR2 -Datentyps gleich. Die Verwendung des VARCHAR2 -Datentyps ist sicherer, da Sie sich nicht befassen müssen, dass eine zukünftige Version von Oracle Ihren Code brechen wird, indem leere Zeichenfolgen nicht mehr als null betrachtet werden.

Denn im ursprünglichen SQL -Standard betrug ein Varchar 255 Zeichen, und Oracle hatte in jenen Tagen zumindest einen Stich bei Standards Compliance.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top