Domanda

In Oracle, qual è la differenza tra :

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

e

CREATE TABLE CLIENT
(
 NAME VARCHAR2(11 CHAR), -- or even VARCHAR2(11)
 ID_CLIENT NUMBER
)
È stato utile?

Soluzione

Supponiamo che il database set di caratteri UTF-8, che è l'impostazione consigliata nelle ultime versioni di Oracle.In questo caso, alcuni caratteri prendere più di 1 byte per memorizzare nel database.

Se si definisce il campo VARCHAR2(11 BYTE), Oracle può utilizzare fino a 11 byte per l'archiviazione, ma non si può effettivamente essere in grado di memorizzare 11 personaggi in campo, perché alcuni di loro prendono più di un byte per memorizzare, ad esempio,i caratteri non inglesi.

Definendo il campo come VARCHAR2(11 CHAR) dite Oracle è possibile utilizzare lo spazio sufficiente per memorizzare 11 caratteri, non importa quanti byte ci vuole per memorizzare ogni.Un singolo carattere può richiedere fino a 4 byte.

Altri suggerimenti

Uno ha esattamente lo spazio per 11 byte, l'altro esattamente a 11 caratteri.Alcuni caratteri, ad esempio Unicode varianti, può utilizzare più di un byte per char, quindi il 11 byte campo potrebbe avere spazio per meno di 11 caratteri a seconda della codifica.

Vedi anche http://www.joelonsoftware.com/articles/Unicode.html

A seconda della configurazione del sistema, la dimensione di un CHAR misurati in BYTE può variare.Nei tuoi esempi:

  1. Limiti del campo a 11 BYTE
  2. Limiti del campo a 11 CHARacters


Conclusione:1 CHAR non è uguale a 1 BYTE.

Io non sono sicuro dato che non sono un utente di Oracle, ma presumo che la differenza sta quando si utilizza il set di caratteri multibyte come Unicode (UTF-16/32).In questo caso, 11 Byte potrebbe account per meno di 11 caratteri.

Anche questi tipi di campo possono essere trattati in modo diverso in relazione ai caratteri accentati o il caso, per esempio 'binaryField(ete) = "été"' non corrisponde po 'charField(ete) = "été"' potrebbe (ancora non sono sicuro di Oracle).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top