Oracle
 sql >> Database >  >> RDS >> Oracle

L'inserimento di caratteri nazionali in una colonna Oracle NCHAR o NVARCHAR non funziona

Modifica:si noti che il modo migliore per gestire UTF su Oracle è creare il database utilizzando il set di caratteri del database AL32UTF8 e utilizzare le colonne varchar2 ordinarie. Uno dei problemi con l'utilizzo delle colonne nchar è che Oracle non può utilizzare gli indici per le colonne char/varchar2 ordinarie quando gli argomenti vengono inviati come nchar per impostazione predefinita.

Comunque:se non riesci a convertire il database:

Innanzitutto, i letterali unicode devono essere preceduti da una 'n', in questo modo:

select n'Language - Språk - Język' from dual;

*) Le codifiche a 8 bit non possono gestire questo testo

Sfortunatamente, questo non è abbastanza.

Per qualche ragione, il comportamento predefinito per i client di database è tradurre tutte le stringhe letterali nel set di caratteri del database, il che significa che i valori verranno modificati anche prima che il database possa vedere la stringa.

I client necessitano di una configurazione per poter inserire un carattere unicode in una colonna NCHAR o NVARCHAR:

SQL Plus su Unix

Queste variabili environemnet configurano l'ambiente unix e sqlplus per l'utilizzo di file UTF-8 e configurano anche sqlplus per inviare stringhe letterali in unicode.

NLS_LANG=AMERICAN_AMERICA.AL32UTF8
LC_CTYPE="en_US.UTF-8"
ORA_NCHAR_LITERAL_REPLACE=true

(en_US.UTF-8 è per Solaris - Linux o altri sistemi potrebbero richiedere stringhe diverse, utilizzare locale -a per elencare le localizzazioni supportate.)

Driver JDBC

Le applicazioni che utilizzano il driver Oracle JDBC devono avere la seguente proprietà di sistema definita per inviare stringhe letterali in unicode.

-Doracle.jdbc.defaultNChar=true 
-Doracle.jdbc.convertNcharLiterals=true

Sviluppatore SQL

Individua sqldeveloper.conf e aggiungi le seguenti righe:

AddVMOption -Doracle.jdbc.defaultNChar=true 
AddVMOption -Doracle.jdbc.convertNcharLiterals=true

SQL Plus su Microsoft Windows

Non ho provato se SQLplus su Microsoft Windows o Toad gestisce utf-8. Sqlplusw.exe potrebbe farlo e le seguenti impostazioni del registro potrebbero fare il trucco.

NLS_LANG=AMERICAN_AMERICA.AL32UTF8
ORA_NCHAR_LITERAL_REPLACE=true