2011-09-19 11 views
26

sto sostenendo il codice che ha sotto di dichiarazione sullo schema: -varchar2 (n BYTE | CAR) di default -> CHAR o BYTE

create table sample (
     id number Primary key, 
     username varchar2(100), 
); 

Alzai gli occhi sulla documentazione di Oracle & varchar2 dispone di due modalità di dichiarazione VARCHAR2 (n BYTE) e varchar2 (n CHAR), Se non si specifica esplicitamente BYTE o CHAR &, basta dichiarare il nome utente varchar2 (500), quindi verranno assegnati 500 BYTES o 500 caratteri?

grazie,

risposta

30

Il valore di default sarà qualunque sia il vostro parametro NLS_LENGTH_SEMANTICS è impostato. Per impostazione predefinita, è BYTE coerente con le versioni precedenti di Oracle in cui non era possibile utilizzare la semantica della lunghezza dei caratteri. Se stai definendo il tuo schema e stai utilizzando un set di caratteri a larghezza variabile (come AL32UTF8), ti consiglio vivamente di impostare NLS_LENGTH_SEMANTICS in CHAR perché quasi sempre hai intenzione di specificare le lunghezze in caratteri non in byte.

+13

Si potrebbe desiderare di aggiungere che l'impostazione NLS_LENGTH_SEMANTICS al CAR * non * di superare il limite di 4000 byte ** ** per una colonna VARCHAR. –

+1

nella pagina [this] (https://docs.oracle.com/cd/E24693_01/server.11203/e24448/initparams149.htm): _Caution: Oracle consiglia vivamente di non impostare il parametro NLS_LENGTH_SEMANTICS su CHAR nell'istanza o nel file dei parametri del server. Ciò potrebbe causare la creazione inaspettatamente di colonne con semantica della lunghezza dei caratteri di molti script di installazione esistenti, con conseguenti errori di runtime, inclusi buffer overflow. Come hai detto, è quasi sempre inteso specificare le lunghezze nei caratteri. Questo mi scoraggia davvero. cosa dovrei sapere, ogni tanto ho bisogno di aumentare alcune dimensioni della colonna. – mkb

+2

@mkb - Il parametro può essere impostato anche a livello di sessione. Impostare il parametro a livello di sessione quando si definiscono gli oggetti se non si desidera il rischio di impostarlo a livello di istanza. Oppure è sufficiente riportarlo a livello di istanza su BYTE prima di eseguire uno script di installazione di Oracle. –

8

Si potrebbe verificare il valore corrente utilizzando la seguente query:

SELECT 
    value 

FROM 
    NLS_DATABASE_PARAMETERS 

WHERE 
    parameter='NLS_LENGTH_SEMANTICS'; 
+1

Il suo 'valore' e non 'val' –

+0

@Abhijith Correzione apportata. –