Was ist der Unterschied zwischen varchar und varchar2?
oracle
sqldatatypes
hrishi
quelle
quelle
Antworten:
Im Moment sind sie Synonyme.
VARCHAR
ist vorbehaltenOracle
, um die Unterscheidung zwischenNULL
und leeren Zeichenfolgen in Zukunft zu unterstützen, wie diesANSI
standardmäßig vorgeschrieben ist.VARCHAR2
unterscheidet nicht zwischen einerNULL
und einer leeren Zeichenfolge und wird es niemals tun.Wenn Sie sich auf leere Zeichenfolgen verlassen und
NULL
dasselbe sind, sollten Sie verwendenVARCHAR2
.quelle
VARCHAR2
weil es derzeit keinen Typ gibt, der sich so verhält, wie erVARCHAR
sollte. In der Tat sollten Sie überhaupt nicht verwenden,VARCHAR
bis es richtig implementiert ist.where x is NULL
Erträge unterschiedliche Ergebnisse auswhere x = ''
nicht nicht bedeuten , dassNULL
und''
sind in keiner Weise anders. Das unterschiedliche Verhalten ist auf den=
Bediener zurückzuführen.Derzeit verhält sich VARCHAR genauso wie VARCHAR2. Der Typ
VARCHAR
sollte jedoch nicht verwendet werden, da er für die zukünftige Verwendung reserviert ist.Entnommen aus: Unterschied zwischen CHAR, VARCHAR, VARCHAR2
quelle
VARCHAR
sollte nicht verwendet werden. Ich habe es bearbeitetEntnommen aus der neuesten stabilen Oracle-Produktionsversion 12.2: Datentypen
Der Hauptunterschied besteht darin, dass
VARCHAR2
es sich um einen internen undVARCHAR
einen externen Datentyp handelt . Wir müssen also den Unterschied zwischen einem internen und einem externen Datentyp verstehen ...Innerhalb einer Datenbank werden Werte in Spalten in Tabellen gespeichert. Intern repräsentiert Oracle Daten in bestimmten Formaten, die als interne Datentypen bezeichnet werden .
Im Allgemeinen funktionieren OCI-Anwendungen (Oracle Call Interface) nicht mit internen Datentypdarstellungen von Daten, sondern mit Datentypen in der Hostsprache, die durch die Sprache vordefiniert sind, in der sie geschrieben wurden. Wenn Daten zwischen einer OCI-Clientanwendung und einer Datenbanktabelle übertragen werden, konvertieren die OCI-Bibliotheken die Daten zwischen internen Datentypen und externen Datentypen.
Externe Typen bieten dem Programmierer Komfort, indem sie die Arbeit mit Host-Sprachtypen anstelle proprietärer Datenformate ermöglichen. OCI kann beim Übertragen von Daten zwischen einer Oracle-Datenbank und einer OCI-Anwendung eine Vielzahl von Datentypkonvertierungen durchführen. Es gibt mehr externe OCI-Datentypen als interne Oracle-Datentypen.
Der
VARCHAR2
Datentyp ist eine Zeichenfolge variabler Länge mit einer maximalen Länge von 4000 Byte. Wenn der init.ora-Parameter max_string_size standardmäßig ist, kann die maximale Länge von aVARCHAR2
4000 Byte betragen . Wenn der init.ora-Parameter max_string_size = erweitert ist, kann die maximale Länge von aVARCHAR2
32767 Byte betragenDer
VARCHAR
Datentyp speichert Zeichenfolgen unterschiedlicher Länge. Die ersten 2 Bytes enthalten die Länge der Zeichenfolge und die verbleibenden Bytes enthalten die Zeichenfolge. Die angegebene Länge der Zeichenfolge in einer Bindung oder einem Definitionsaufruf muss die zweiVARCHAR
Längenbytes enthalten. Die größte Zeichenfolge, die empfangen oder gesendet werden kann, ist also 65533 Byte lang und nicht 65535.Ein schneller Test in einer 12.2-Datenbank legt nahe, dass Oracle als internen Datentyp a immer noch
VARCHAR
als Pseudotyp für behandeltVARCHAR2
. Es ist KEINSYNONYM
tatsächlicher Objekttyp in Oracle.Es gibt auch einige Auswirkungen
VARCHAR
auf ProC / C ++ - Precompiler-Optionen. Für interessierte Programmierer befindet sich der Link unter: Pro * C / C ++ - Programmierhandbuchquelle
VARCHAR
immer noch behandelt'' == null
?Nach einigen Experimenten (siehe unten) kann ich bestätigen, dass sich seit September 2017 nichts an der in der akzeptierten Antwort beschriebenen Funktionalität geändert hat : -
NULL
s für beideVARCHAR
undVARCHAR2
.Der historische Grund für diese beiden Schlüsselwörter wird in einer Antwort auf eine andere Frage gut erklärt .
quelle
VARCHAR kann bis zu 2000 Byte Zeichen speichern, während VARCHAR2 bis zu 4000 Byte Zeichen speichern kann.
Wenn wir den Datentyp als VARCHAR deklarieren, belegt er Platz für NULL-Werte. Im Fall des Datentyps VARCHAR2 belegt er keinen Platz für NULL-Werte. z.B,
name varchar(10)
reserviert 6 Bytes Speicher, auch wenn der Name 'Ravi__' ist, wohingegen
reserviert Speicherplatz entsprechend der Länge der Eingabezeichenfolge. zB 4 Bytes Speicher für 'Ravi__'.
Hier steht _ für NULL.
HINWEIS: varchar reserviert Platz für Nullwerte und varchar2 reserviert keinen Platz für Nullwerte.
quelle
VARCHAR
mitCHAR
.Derzeit sind sie gleich. aber vorher
VARCHAR
wird von Oracle reserviert, um die Unterscheidung zwischenNULL
und leeren Zeichenfolgen in Zukunft zu unterstützen, wie es der ANSI-Standard vorschreibt.VARCHAR2
unterscheidet nicht zwischen einerNULL
und einer leeren Zeichenfolge und wird es niemals tun.Emp_name varchar(10)
- Wenn Sie einen Wert mit weniger als 10 Stellen eingeben, kann der verbleibende Speicherplatz nicht gelöscht werden. Es wurden insgesamt 10 Leerzeichen verwendet.Emp_name varchar2(10)
- Wenn Sie einen Wert mit weniger als 10 Stellen eingeben, wird der verbleibende Speicherplatz automatisch gelöschtquelle
create table deleteme_table(v varchar(10), v2 varchar2(10)); insert into deleteme_table (v, v2) values ('abc','abc'); select v, length(v), v2, length(v2) from deleteme_table;
VARCHAR ist das Synonym für VARCHAR2. Sie sollten VARCHAR jedoch nicht verwenden, da Oracle möglicherweise in Zukunft seine Semantik ändert.
quelle