Nehmen wir an, der Datenbankzeichensatz ist UTF-8, was in den neuesten Versionen von Oracle empfohlen wird. In diesem Fall benötigen einige Zeichen mehr als 1 Byte zum Speichern in der Datenbank.
Wenn Sie das Feld als VARCHAR2(11 BYTE)
definieren, kann Oracle bis zu 11 Byte für die Speicherung verwenden, aber Sie können möglicherweise nicht 11 Zeichen im Feld speichern, da einige mehr als ein Byte zum Speichern benötigen, z. nicht englische Zeichen.
Indem Sie das Feld als VARCHAR2(11 CHAR)
definieren, sagen Sie Oracle, dass es genügend Platz zum Speichern von 11 Zeichen haben kann, egal wie viele Bytes es dauert, um jedes zu speichern. Ein einzelnes Zeichen kann bis zu 4 Bytes benötigen.
Beachten Sie, dass sich die Semantik der Zeichenlänge nicht auf die maximale Länge von 4000 Byte für ein 'VARCHAR2' auswirkt. Das Deklarieren von 'VARCHAR2 (4000 CHAR)' erlaubt weniger als 4000 Zeichen, wenn einige Zeichen mehrere Speicherbytes benötigen. –
@David Sykes Ist das semantisch dasselbe mit NVARCHAR (11)? – Nap
@Nap Nicht so weit ich weiß. Ich glaube, dass der Size-Parameter in der NVARCHAR-Typ-Deklaration die Bedeutung wie in VARCHAR2 hat. Um genügend Speicherplatz für 11 Zeichen (nicht Bytes) im NVARCHAR-Zeichensatz zu gewährleisten, würden Sie NVARCHAR (11 CHAR) sagen. HINWEIS: Ich habe das nicht überprüft. Ich habe NVARCHAR nie benutzt. –