Risposte:
Supponiamo che il set di caratteri del database sia UTF-8, che è l'impostazione consigliata nelle versioni recenti di Oracle. In questo caso, alcuni caratteri richiedono più di 1 byte per essere archiviati nel database.
Se si definisce il campo come VARCHAR2(11 BYTE)
, Oracle può utilizzare fino a 11 byte per l'archiviazione, ma potrebbe non essere possibile archiviare 11 caratteri nel campo, poiché alcuni di essi richiedono più di un byte per l'archiviazione, ad esempio caratteri non inglesi.
Definendo il campo quando VARCHAR2(11 CHAR)
si dice a Oracle che può utilizzare abbastanza spazio per memorizzare 11 caratteri, indipendentemente da quanti byte siano necessari per memorizzare ciascuno. Un singolo carattere può richiedere fino a 4 byte.
Uno ha esattamente spazio per 11 byte, l'altro per esattamente 11 caratteri. Alcuni set di caratteri come le varianti Unicode possono utilizzare più di un byte per carattere, pertanto il campo di 11 byte potrebbe avere spazio per meno di 11 caratteri a seconda della codifica.
Vedi anche http://www.joelonsoftware.com/articles/Unicode.html
Non sono sicuro poiché non sono un utente Oracle, ma presumo che la differenza risieda quando si utilizzano set di caratteri multi-byte come Unicode (UTF-16/32). In questo caso, 11 byte potrebbero contenere meno di 11 caratteri.
Anche questi tipi di campi potrebbero essere trattati in modo diverso rispetto ai caratteri accentati o al caso, ad esempio 'binaryField (ete) = "été"' non corrisponderà mentre 'charField (ete) = "été"' potrebbe (di nuovo non sono sicuro di Oracle) .
VARCHAR2
. La dichiarazione di aVARCHAR2(4000 CHAR)
consentirà meno di 4000 caratteri se alcuni dei caratteri richiedono più byte di memoria.