It is currently 7 June 2025, 20:13 Advanced search

Dimensione VARCHAR2 in oracle

Questo forum è nato con lo scopo di raccogliere le proposte di modifica di Instant Developer e discuterne insieme.

Dimensione VARCHAR2 in oracle

Postby corvo » 11 May 2011, 13:23

Se si crea un campo di tipo character in INDE la DDL che viene creata è simile alla seguente: create table TABELLA (CAMPO varchar2(150) not null).
Poichè non viene esplicitata l'unità di misura (CHAR o BYTE) dopo il valore 150, viene utilizzata quella di default a livello di DB (che in genere è BYTE). Mi piacerebbe che si potesse scegliere tale unità di misura da INDE e che questi la aggiungesse nella definizione della DDL o comunque preferirei che di default specificasse come unità di misura il CHAR. Questo eviterebbe problemi con l'inserimento di caratteri particolari come il simbolo dell'euro che occupa più di un byte.
corvo
 
Posts: 7
Joined: 11 May 2011, 12:47

Re: Dimensione VARCHAR2 in oracle

Postby g.lanzi » 16 May 2011, 8:28

Oppure più semplicemente si potrebbe specificare sempre CHAR, dato che il campo è VARCHAR2.
Giuseppe Lanzi
Director of Support services
Pro Gamma S.p.A.
User avatar
g.lanzi
Pro Gamma
Pro Gamma
 
Posts: 3504
Joined: 29 September 2010, 10:24
Location: Bologna

Re: Dimensione VARCHAR2 in oracle

Postby teopost » 17 May 2011, 11:39

Ma attenzione alla retrocompatibilita'. Oracle 7 li supporta ? Non ne sono sicuro.
Oracle Database Administrator
User avatar
teopost
 
Posts: 211
Joined: 26 October 2010, 20:46

Re: Dimensione VARCHAR2 in oracle

Postby a.maioli » 17 May 2011, 14:58

Secondo me è sufficiente attivare il flag "campi carattere unicode" nelle proprietà del database, così i campi diventano di tipo nvarchar2 invece che varchar2 e allora la lunghezza è sempre in caratteri.
User avatar
a.maioli
Pro Gamma
Pro Gamma
 
Posts: 1090
Joined: 29 September 2010, 12:47

Re: Dimensione VARCHAR2 in oracle

Postby g.lanzi » 26 May 2011, 8:43

E' vero, non mi era venuto in mente il flag campi caratteri unicode. In effetti questo risolve le cose.
Giuseppe Lanzi
Director of Support services
Pro Gamma S.p.A.
User avatar
g.lanzi
Pro Gamma
Pro Gamma
 
Posts: 3504
Joined: 29 September 2010, 10:24
Location: Bologna

Re: Dimensione VARCHAR2 in oracle

Postby corvo » 27 May 2011, 8:37

Ho provato quanto suggerito da Andrea. Utilizzando il flag specificato i campi testo vengono tradotti come NVARCHAR2 il chè risolve il mio problema sull'unità di misura.
Questo però ha un pesante effetto collaterale: mi risulta (e ho fatto un semplice test per conferma) che i campi NVARCHAR2 utilizzino per memorizzare un singolo carattere 2byte, indipendentemente dal carattere. Al contrario i campi VARCHAR2 di norma utilizzano 1 byte per carattere e solo in caso di caratteri con codifiche particolari (come l'euro) ne utilizzano due.
Utilizzando NVARCHAR2 al posto di VARCHAR2 in un DB occuperei circa il doppio dello spazio. Questo è ancora più rilevante per alcune delle nostre applicazioni che sono basate su Oracle 10gXE, gratuito, ma con un limite sulla dimensione complessiva del DB di circa 4GB.
corvo
 
Posts: 7
Joined: 11 May 2011, 12:47

Re: Dimensione VARCHAR2 in oracle

Postby a.maioli » 27 May 2011, 13:13

L'uso di NVarchar2 indica a Oracle di utilizzare caratteri internazionali, la dimensione con cui vengono memorizzati dipende da come è stato creato il database, come indicato nella documentazione di Oracle stesso. Usando UTF8 come codifica di creazione del database, si ottiene il risultato voluto.
http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/datatype.htm
User avatar
a.maioli
Pro Gamma
Pro Gamma
 
Posts: 1090
Joined: 29 September 2010, 12:47

Re: Dimensione VARCHAR2 in oracle

Postby corvo » 3 June 2011, 8:51

Ho discusso della cosa con alcuni esperti di Oracle (o almeno "sedicenti tali"!!). Ho trovato il modo di impostare il character set (e quindi le dimensione degli NVARCHAR) a livello di Database, così come lo avevo trovato di impostare l'unità di misura in CHAR per i VARCHAR2. Il problema è che questi parametri non risco ad impostarli a livello di SCHEMA (o USER) oracle. Questo nella maggior parte dei casi non è un problema (dato che il DBA sono io!). Diventa però problematico quando ho a disposizione solo uno schema e il DB è gestito da altri DBA. In questo caso non posso chiedere di cambiare l'intero character set per le mie esigenze e di solito di DBA sono restii a darmi delle tablespace molto grandi.
Se potessi definire la dimensione in CHAR direttamente negli statement di creazione dello schema non dovrei chiedere niente al DBA (e mi risparmierei un sacco di burocrazia!!).
corvo
 
Posts: 7
Joined: 11 May 2011, 12:47

Re: Dimensione VARCHAR2 in oracle

Postby a.maioli » 3 June 2011, 9:29

Da quello che capisco io, anche se non sono un esperto Oracle, è che tutto dipende dal set di caratteri con cui il db è stato creato, sia nel caso di uso di nvarchar2 che in quello di utilizzo dell'unità di misura caratteri invece che byte.
il manuale, infatti, dice:

Character semantics treat strings as a sequence of characters. A character is technically a codepoint of the database character set.


Leggi qui: http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/datatype.htm

Quindi, se il database è codificato in UTF8, usare NVARCHAR2 oppure l'unità caratteri è uguale. E questo è vero anche se il database è AL16UTF16, in entrambi i casi avrai 2 byte per carattere. Tutto dipende da come è stato creato il database.
User avatar
a.maioli
Pro Gamma
Pro Gamma
 
Posts: 1090
Joined: 29 September 2010, 12:47


Return to Proposte di modifica

Who is online

Users browsing this forum: No registered users and 9 guests