Es scheint, dass Oracle zu einer Zeit Pläne hatte, VARCHAR anders zu definieren als VARCHAR2 . Es hat Kunden dies mitgeteilt und rät von der Verwendung von VARCHAR ab . Was auch immer ihre Pläne waren, ab 11.2.0.2 ist VARCHAR identisch mit VARCHAR2 . In der SQL-Sprachreferenz 11g Release 2 heißt es:
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 für Zeichenfolgen variabler Länge im Vergleich zu verschiedenen Vergleichssemantiken neu definiert werden.
Derzeit ist VARCHAR ein Synonym für VARCHAR2. In zukünftigen Versionen von PL / SQL wird VARCHAR möglicherweise ein separater Datentyp mit unterschiedlicher Vergleichssemantik, um den neuen SQL-Standards gerecht zu werden. Es ist eine gute Idee, VARCHAR2 anstelle von VARCHAR zu verwenden.
Der VARCHAR-Datentyp ist gleichbedeutend mit dem VARCHAR2-Datentyp. Verwenden Sie zum Speichern von Zeichenfolgen variabler Länge immer den Datentyp VARCHAR2, um mögliche Verhaltensänderungen zu vermeiden.
In der Dokumentation zu Oracle 9.2 und 8.1.7 wird im Wesentlichen dasselbe gesagt, und obwohl Oracle von der Verwendung von VARCHAR immer wieder abgeraten wird , haben sie bisher nichts unternommen, um die Parität mit VARCHAR2 zu ändern .
Es gibt Hinweise darauf, dass die Definition vor 8i abweichend gewesen sein könnte.
Leigh Riffel
Früher dachte ich, es gäbe eine andere Längenbeschränkung als varcharvor Version 8, aber ich kann nichts Seriöses finden, um dies zu belegen, und jetzt frage ich mich, ob es nur ein Mythos ist.
Jack Douglas
@ Jack Douglas - Ich kann in der Oracle 7-Dokumentation nichts dazu finden. Von docs.oracle.com/cd/A57673_01/DOC/dcommon/oin/indexj.htm >> Oracle 7 Server >> Serverkonzepte >> Oracle-Datentypen (können nicht direkt darauf verlinken) sagen so ziemlich das Gleiche wie später Versionen. In einem anderen Abschnitt der Dokumentation zu Version 7 heißt es, dass Varchar und Varchar2 in Version 6 Synonyme für char waren.
Leigh Riffel
25
Derzeit sind die beiden synonym.
VARCHAR ist ein ANSI-Standarddatentyp, aber die Oracle-Implementierung des VARCHAR-Datentyps verstößt gegen den ANSI-Standard, indem die leere Zeichenfolge als NULL betrachtet wird (die Oracle-Implementierung geht dem ANSI-Standard voraus). Wie Leigh betont, hat Oracle angegeben, dass sich die Semantik des Datentyps VARCHAR in Bezug auf die Behandlung der leeren Zeichenfolge in Zukunft möglicherweise ändert. 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, da leere Zeichenfolgen nicht mehr als NULL betrachtet werden.
Denn im ursprünglichen SQL-Standard bestand ein VARCHAR aus 255 Zeichen, und Oracle hatte zu dieser Zeit zumindest ein Problem mit der Einhaltung von Standards.
Das gibt Hoffnung, Oracle varchar3 (max) in einigen Jahren zu sehen.
bernd_k
SQL-Server hatte keine Probleme, die zulässige Länge von 255 auf 8000 (und jetzt sogar auf max) zu erhöhen. Warum brauchte Oracle einen anderen Datentyp?
bernd_k
1
Es besteht keine Notwendigkeit für a varchar(max), verwenden Sie einfach aCLOB
varchar
vor Version 8, aber ich kann nichts Seriöses finden, um dies zu belegen, und jetzt frage ich mich, ob es nur ein Mythos ist.Derzeit sind die beiden synonym.
VARCHAR ist ein ANSI-Standarddatentyp, aber die Oracle-Implementierung des VARCHAR-Datentyps verstößt gegen den ANSI-Standard, indem die leere Zeichenfolge als NULL betrachtet wird (die Oracle-Implementierung geht dem ANSI-Standard voraus). Wie Leigh betont, hat Oracle angegeben, dass sich die Semantik des Datentyps VARCHAR in Bezug auf die Behandlung der leeren Zeichenfolge in Zukunft möglicherweise ändert. 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, da leere Zeichenfolgen nicht mehr als NULL betrachtet werden.
quelle
Denn im ursprünglichen SQL-Standard bestand ein VARCHAR aus 255 Zeichen, und Oracle hatte zu dieser Zeit zumindest ein Problem mit der Einhaltung von Standards.
quelle
varchar(max)
, verwenden Sie einfach aCLOB