Was genau bedeutet, dass die Größe einer VARCHAR2-Feld deklariert ist als 1 BYTE? (in einer Oracle-DB)
Ich bin nicht so in database
und ich habe folgende Zweifel.
Weiß ich, dass ich erklären varchar2
Feld mit der Anzahl der char, die es enthalten kann.
Aber in ein Oracle
Datenbank, auf der ich arbeite, fand ich, dass ein Feld (namens PDF) ist definiert als:
VARCHAR2(1 BYTE)
Was genau bedeutet das? Wie viele characted es enthält?
Andere Frage ist: was genau ist der Unterschied zwischen einem VARCHAR
Feld und ein VARCHAR2
Feld?
Tnx
- möglich, Duplikat der Was ist der Unterschied zwischen varchar und varchar2?
- und mögliche Duplikate von stackoverflow.com/questions/81448/...
- siehe auch parameter NLS_LENGTH_SEMANTICS: asktom.oracle.com/pls/asktom/...
- Ich denke, in Ihrem Fall der Unterschied zwischen BYTE und CHAR ist bedeutungslos. Oracle unterstützt keine booleschen Typ, so ist es in der Regel umgesetzt als
CHAR(1)
. Mit variabler Länge Zeichenkette mit max. Länge von einem byte ist nicht-Sinn.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie deklarieren Sie Spalten/Variablen, die als varchar2(n CHAR) und varchar2(n byte).
n CHAR bedeutet, dass die variable halt n Zeichen. In multi-byte-Zeichensätze, die Sie nicht immer wissen, wie viele bytes ein, die Sie speichern möchten, aber Sie wollen, garantieren die Speicherung einer bestimmten Menge von Zeichen.
Byte n bedeutet einfach die Anzahl der bytes ein, die Sie speichern möchten.
varchar ist veraltet. Verwenden Sie es nicht.
Was ist der Unterschied zwischen varchar und varchar2?
Den
VARCHAR
Datentyp ist gleichbedeutend mit derVARCHAR2
Datentyp. Vermeiden Sie mögliche änderungen im Verhalten, immer dieVARCHAR2
Datentyp zum speichern von variable-Länge-Zeichenfolgen.Wenn Ihre Datenbank läuft auf einem single-byte-Zeichensatz (z.B.
US7ASCII
,WE8MSWIN1252
oderWE8ISO8859P1
) es macht keinen Unterschied, ob SieVARCHAR2(x BYTE)
oderVARCHAR2(x CHAR)
.Es macht nur einen Unterschied, wenn die DB läuft auf multi-byte-Zeichensatz (z.B.
AL32UTF8
oderAL16UTF16
). Sie können einfach sehen es in diesem Beispiel:VARCHAR2(1 CHAR)
bedeutet, Sie können speichern Sie bis zu 1 Charakter, egal wie viele byte hat. Im Falle von Unicode-Zeichen belegen bis zu 4 Byte.VARCHAR2(1 BYTE)
bedeutet, dass Sie speichern können, ein Zeichen, welches belegt max. 1 byte.Wenn Sie nicht angeben, entweder
BYTE
oderCHAR
dann der Standardwert genommen wird vonNLS_LENGTH_SEMANTICS
session-parameter.Es sei denn, Sie haben Oracle 12c in dem Sie festlegen können
MAX_STRING_SIZE=EXTENDED
die GrenzeVARCHAR2(4000 CHAR)
Jedoch,
VARCHAR2(4000 CHAR)
bedeutet nicht, dass Sie garantiert zum speichern von bis zu 4000 Zeichen. Die Grenze ist immer noch 4000 bytes, so dass im schlimmsten Fall können Sie speichern nur bis zu 1000 Zeichen in einem solchen Feld.Siehe dieses Beispiel (
€
in UTF-8 belegt 3 bytes):Siehe auch Beispiele und Grenzen der BYTE-und CHAR-Semantik-Nutzung (NLS_LENGTH_SEMANTICS) (Doc-ID 144808.1)
Beantworten Sie die erste Frage:
Ja, es bedeutet, dass 1 byte reserviert für 1 Charakter. Schauen Sie sich dieses Beispiel
Und beantworten Ihre nächsten:
Der Unterschied zwischen
varchar2
undvarchar
:VARCHAR
können bis zu2000 bytes
von Zeichen, währendVARCHAR2
können bis zu4000 bytes
Zeichen.VARCHAR
dann wird es besetzen Raum fürNULL values
Im Fall vonVARCHAR2
datatype es wirdnot
belegen keinen Platz.bedeutet es NUR ein byte pro Zeichen reserviert - also, wenn Sie multi-byte-Zeichensätze, 1 Charakter nicht passen
wenn Sie wissen, Sie haben wenigstens genug Platz für 1 Zeichen, nicht die BYTE-syntax, es sei denn, Sie wissen genau, wie viel Platz Sie brauchen werden, um zu speichern, dass byte
wenn Sie Zweifel haben, verwenden Sie VARCHAR2(1 CHAR)
gleiche Sache hier beantwortet Unterschied zwischen BYTE und CHAR in der Spalte Datentypen
Auch in 12c max für varchar2 jetzt 32k, nicht 4000. Wenn Sie mehr benötigen, verwenden Sie CLOB
in Oracle, nicht mit VARCHAR
SYSTEM
Ebene, indem SieMAX_STRING_SIZE
zuEXTENDED
, sonst standardmäßig wäre es4000
.CHR(127)
in UTF-8