Condividi
Differenze tra i tipi BYTE e CHAR in Oracle
In Oracle qual'è la differenza tra i tipi Char e Byte, ossia qual'è la differenza tra definire una colonna così
CREATE TABLE CLIENT
(
NAME VARCHAR2(11 BYTE),
ID_CLIENT NUMBER
)
oppure così
CREATE TABLE CLIENT
(
NAME VARCHAR2(11 CHAR), -- o anche VARCHAR2(11)
ID_CLIENT NUMBER
)
In Corso
2
Oracle
15-06-2018
2 Risposte
2813 Visite
+1
Risposte ( 2 approvate )
Assumendo che il database character (charset) impostato su Oracle sia UTF-8 (raccomandato), bisogna comprendere che un carattere pèuò occupare più di un byte per essere memorizzato sul database. Ad es. alcuni caratteri speciali o non appartenenti all'insieme dei caratteri dell'alfabeto latino occidentale occupano più di un byte per essere rappresentati.
Premesso questo, quando tu definisci un tipo colonna come
VARCHAR2(11 BYTE)
stai dicendo ad Oracle che in quel campo può memorizzare sino ad 11byte ma non 11 caratteri, poiché un carattere (utf-8) potrebbe occupare anche sino a 4byte di spazio.Invece quando definisci il tipo come
VARCHAR2(11 CHAR)
di mettere a disposizione uno spazio necessario ad archiviare sino ad un massimo di undici caratteri, indipendentemente da quanto spazio (byte) ognuno di essi occupa.Il tipo VAR... nella definizione dei tipi di tutti i database, quindi anche in Oracle, intende una lunghezza variabile del dato in esso contenuto, specificandone anche la lunghezza (11) dici al motore di database che la lunghezza di quel campo può arrivare sino ad un massimo di undici, ma potrebbe essere anche inferiore, quindi non è fissata, è per l'appunto variabile.
A sua volta i byte ed i char non hanno la stessa dimensione, quindi definendoli per come hai scritto avrai:
In conclusione 1 Char non è equivalente ad 1 Byte, e può occupare più di un byte di spazio se necessario.