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 )

  1. Danilo Calasanna
    +1
    15-06-2018 12:04:24
    Rispondi

    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.

  2. Matteo Formesi
    0
    15-06-2018 12:13:09
    Rispondi

    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:

    • Un campo che può contenere dati sino ad un massimo di 11Byte
    • Un campo che può contenere caratteri sino ad un massimo di 11Char

    In conclusione 1 Char non è equivalente ad 1 Byte, e può occupare più di un byte di spazio se necessario.

Rispondi

Per poter rispondere a questa domanda, devi essere registrato e loggato sul sito, dopodichè compila il box sottostante cercando di essere il più chiaro ed esauriente possibile, la tua risposta potrebbe essere la soluzione che l'utente cerca ed essere contrassegnata come migliore, consentendoti così di ottenere punti ed autorevolezza.

Rino Giandello

Rino Giandello

Autore di questa domanda

 Domanda Precedente

 Elenco Domande 

Domanda Successiva