it-swarm-eu.dev

Unterschied zwischen BYTE und CHAR in Spaltendatentypen

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
)
159
Guido

Angenommen, der Zeichensatz der Datenbank ist UTF-8. Dies ist die empfohlene Einstellung in neueren Versionen von Oracle. In diesem Fall benötigen einige Zeichen mehr als 1 Byte, um in der Datenbank gespeichert zu werden.

Wenn Sie das Feld als VARCHAR2(11 BYTE) definieren, kann Oracle bis zu 11 Byte für die Speicherung verwenden, Sie können jedoch möglicherweise nicht 11 Zeichen in dem Feld speichern, da einige von ihnen mehr als ein Byte zum Speichern benötigen , z.B nicht englische Zeichen.

Indem Sie das Feld als VARCHAR2(11 CHAR) definieren, teilen Sie Oracle mit, dass es genügend Speicherplatz für 11 Zeichen verwenden kann, unabhängig davon, wie viele Bytes für die Speicherung der einzelnen Zeichen erforderlich sind. Ein einzelnes Zeichen kann bis zu 4 Bytes erfordern.

255
David Sykes

Einer hat genau Platz für 11 Bytes, der andere für genau 11 Zeichen. Einige Zeichensätze, z. B. Unicode-Varianten, verwenden möglicherweise mehr als ein Byte pro Zeichen. Daher kann das 11-Byte-Feld je nach Codierung Platz für weniger als 11 Zeichen bieten.

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

20

Je nach Systemkonfiguration kann die in BYTES gemessene CHAR-Größe variieren. In Ihren Beispielen:

  1. Begrenzt das Feld auf 11 Figuren
  2.  



16
user15453

Ich bin mir nicht sicher, da ich kein Oracle-Benutzer bin, aber ich gehe davon aus, dass der Unterschied bei der Verwendung von Multibyte-Zeichensätzen wie Unicode (UTF-16/32) liegt. In diesem Fall könnten 11 Bytes weniger als 11 Zeichen ausmachen.

Auch diese Feldtypen werden möglicherweise in Bezug auf Akzentzeichen oder Groß-/Kleinschreibung unterschiedlich behandelt, z. B. stimmt 'binaryField (ete) = "été" nicht überein, während' charField (ete) = "été" 'möglicherweise (wiederum nicht sicher, ob Oracle zutrifft). .

3
Seldaek