it-swarm-eu.dev

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

Bei der Migration von Tabellen, die von anderen DBMS nach Oracle stammen, besteht eine der Standardaufgaben darin, alle VARCHAR(n) Felder durch VARCHAR2(n) Felder zu ersetzen (vorausgesetzt n <= 4000) .

Warum nennt Oracle diesen Datentyp VARCHAR2 und nicht nur VARCHAR wie andere DBMS?

19
bernd_k

Es scheint, dass Oracle einmal Pläne hatte, [~ # ~] varchar [~ # ~] eine andere Definition zu geben als VARCHAR2. Es hat den Kunden dies mitgeteilt und rät davon ab, [~ # ~] varchar [~ # ~] zu verwenden. Was auch immer ihre Pläne waren, ab 11.2.0.2 [~ # ~] varchar [~ # ~] ist identisch mit VARCHAR2. Folgendes --- SQL Language Reference 11g Release 2 sagt Folgendes:

Verwenden Sie nicht den Datentyp VARCHAR. Verwenden Sie stattdessen den Datentyp VARCHAR2. Obwohl der VARCHAR-Datentyp derzeit gleichbedeutend mit VARCHAR2 ist, soll der VARCHAR-Datentyp als separater Datentyp neu definiert werden, der für Zeichenfolgen variabler Länge im Vergleich zu verschiedenen Vergleichssemantiken verwendet wird.

Das PL/SQL-Benutzerhandbuch und Referenz 10g Release 2 drückt es so aus:

Derzeit ist VARCHAR ein Synonym für VARCHAR2. In zukünftigen Versionen von PL/SQL wird VARCHAR jedoch möglicherweise zu einem separaten Datentyp mit unterschiedlicher Vergleichssemantik, um neuen SQL-Standards gerecht zu werden. Es ist eine gute Idee, VARCHAR2 anstelle von VARCHAR zu verwenden.

Das Dokument Database Concepts 10g Release 2 sagt dasselbe stärker aus:

Der Datentyp VARCHAR ist gleichbedeutend mit dem Datentyp VARCHAR2. Verwenden Sie immer den Datentyp VARCHAR2, um Zeichenfolgen variabler Länge zu speichern, um mögliche Verhaltensänderungen zu vermeiden.

Die Oracle 9.2- und 8.1.7-Dokumentation sagt im Wesentlichen dasselbe aus, obwohl Oracle die Verwendung von [~ # ~] varchar [~ # ~] immer wieder abschreckt, haben sie dies bisher nicht getan habe alles getan, um die Parität mit VARCHAR2 zu ändern.

26
Leigh Riffel

Derzeit sind die beiden synonym.

VARCHAR ist ein ANSI-Standarddatentyp, aber die Implementierung des VARCHAR-Datentyps durch Oracle verstößt gegen den ANSI-Standard, indem die leere Zeichenfolge als NULL betrachtet wird (die Implementierung von Oracle ist älter als der ANSI-Standard). Wie Leigh betont, hat Oracle angegeben, dass sich die Semantik des Datentyps VARCHAR in Zukunft in Bezug auf die Behandlung der leeren Zeichenfolge ändern kann. In diesem Fall bleibt die Semantik des Datentyps VARCHAR2 unverändert. Die Verwendung des Datentyps VARCHAR2 ist sicherer, da Sie sich keine Sorgen machen müssen, dass eine zukünftige Version von Oracle Ihren Code beschädigt, indem leere Zeichenfolgen nicht mehr als NULL betrachtet werden.

25
Justin Cave

Denn im ursprünglichen SQL-Standard bestand ein VARCHAR aus 255 Zeichen, und Oracle hatte in jenen Tagen zumindest einen Versuch unternommen, die Standards einzuhalten.

3
Gaius