Frage

In Oracle, was ist der Unterschied zwischen:

CREATE TABLE CLIENT
(
 NAME VARCHAR2(11 BYTE),
 ID_CLIENT NUMBER
)

und

CREATE TABLE CLIENT
(
 NAME VARCHAR2(11 CHAR), -- or even VARCHAR2(11)
 ID_CLIENT NUMBER
)
War es hilfreich?

Lösung

Lassen Sie uns den Datenbank-Zeichensatz übernehmen ist UTF-8, die die empfohlene Einstellung in neueren Versionen von Oracle ist. In diesem Fall nehmen einige Zeichen mehr als 1 Byte in der Datenbank zu speichern.

Wenn Sie das Feld als VARCHAR2(11 BYTE) definieren, kann Oracle bis 11 Bytes für die Speicherung verwenden, aber Sie können nicht wirklich in der Lage sein, 11 Zeichen im Feld zu speichern, weil einige von ihnen mehr als ein Byte nehmen zu speichern, z.B. Nicht-englische Zeichen.

Durch das Feld als VARCHAR2(11 CHAR) definieren Sie sagen Oracle es genügend Platz 11 Zeichen speichern können, ganz gleich, wie viele Bytes es jeden zu speichern nimmt. Ein einzelnes Zeichen kann bis zu 4 Byte erforderlich.

Andere Tipps

Man muss genau Platz für 11 Bytes, die andere für genau 11 Zeichen. Einige charsets wie Unicode-Varianten können mehr als ein Byte pro Zeichen verwenden, damit die 11-Byte-Feld Platz für weniger als 11 Zeichen in Abhängigkeit von der Codierung haben könnte.

Siehe auch http://www.joelonsoftware.com/articles/Unicode.html

In Abhängigkeit von der Systemkonfiguration, der eine Größe von CHAR mesured in BYTES variieren kann. In Ihren Beispielen:

  1. Limits Feld 11 BYTE
  2. Limits Feld 11 CHAR Ansager


Fazit:. 1 CHAR ist nicht gleich 1 BYTE

Ich bin nicht sicher, da ich nicht ein Oracle-Benutzer bin, aber ich nehme an, dass der Unterschied liegt, wenn Sie Multi-Byte-Zeichensätze wie Unicode (UTF-16/32) verwenden. In diesem Fall 11 Bytes für weniger als 11 Zeichen erklären könnte.

Auch könnten diese Feldtypen unterschiedlich in Bezug auf akzentuierten Zeichen oder Fall behandelt werden, zum Beispiel ‚binaryField (ete) =‚été‘‘ nicht übereinstimmen, während ‚Charfield (ete) =‚été‘‘ könnte (wieder nicht sicher, über Oracle).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top