2010-10-26 15 views
5

Abbiamo il requisito di memorizzare i dati char di lingue diverse nello stesso schema db. Oracle 10g è il nostro DB. Spero che qualcuno che ha già fatto questo mi darà istruzioni più specifiche su come abilitare i18n a un oracle 10g db. Abbiamo solo bisogno di memorizzare i dati da più locale così come le regole di confronto (sperando che tutti i maggiori db supportino questo) al livello db. Non abbiamo bisogno di formattazione di date, datetime, numeri, valuta, ecc.supporto oracle e i18n

Ho letto alcuni documenti sul supporto i18n di oracle ma un po 'confusi riguardo le loro numerose proprietà nls_ *. Dovrei usare nls_lang o nls_language o NLS_CHARACTERSET .....

risposta

6

Supponendo che si stia costruendo il database da zero, non provando ad aggiornare un database esistente che introduce altri problemi.

Nel database, è necessario assicurarsi che il set di caratteri del database supporti tutti i caratteri che si desidera memorizzare. Presumibilmente, ciò significa impostare NLS_CHARACTERSET del database su AL32UTF8. Personalmente, preferisco impostare anche NLS_LENGTH_SEMANTICS su CHAR. Ciò modifica il comportamento predefinito di un VARCHAR2 (n) per allocare n caratteri di memoria anziché n byte. Dato che AL32UTF8 è un set di caratteri a lunghezza variabile, l'uso della semantica dei byte è generalmente problematico perché devi dichiarare campi che sono 3 volte più lunghi e finire con utenti diversi che possono immettere un diverso numero di caratteri nello stesso campo.

NLS_LANG è un'impostazione client. Questo identifica il set di caratteri sul quale il cliente richiederà la conversione dei dati. Questo generalmente dipende dalla tabella codici del sistema operativo.

+0

thx per una risposta chiara. qual è il significato se AL32UF8. è diverso da UTF8? –

+1

AL32UTF8 è UTF8 ver. 3.1 – walla

+0

grazie. Alcuni dettagli possono essere trovati su http://oracleappstechnology.blogspot.com/2007/10/difference-between-utf8-and-al32utf8.html –