Bearbeiten:Beachten Sie, dass der beste Weg, UTF auf Oracle zu handhaben, darin besteht, die Datenbank mit dem Datenbankzeichensatz AL32UTF8 zu erstellen und gewöhnliche varchar2-Spalten zu verwenden. Eines der Probleme bei der Verwendung von nchar-Spalten besteht darin, dass Oracle keine Indizes für gewöhnliche char/varchar2-Spalten verwenden kann, wenn Argumente standardmäßig als nchar gesendet werden.
Wie auch immer:Wenn Sie die Datenbank nicht konvertieren können:
Erstens muss Unicode-Literalen ein 'n' vorangestellt werden, wie hier:
select n'Language - Språk - Język' from dual;
*) 8-Bit-Kodierungen können diesen Text nicht verarbeiten
Leider reicht das nicht.
Aus irgendeinem Grund besteht das Standardverhalten für Datenbankclients darin, alle Zeichenfolgenliterale in den Datenbankzeichensatz zu übersetzen, was bedeutet, dass Werte geändert werden, noch bevor die Datenbank die Zeichenfolge zu sehen bekommt.
Die Clients benötigen eine gewisse Konfiguration, um ein Unicode-Zeichen in eine NCHAR- oder NVARCHAR-Spalte einfügen zu können:
SQL Plus unter Unix
Diese Umgebungsvariablen richten die Unix-Umgebung und sqlplus so ein, dass sie UTF-8-Dateien verwenden, und konfigurieren sqlplus auch so, dass Zeichenfolgenliterale in Unicode gesendet werden.
NLS_LANG=AMERICAN_AMERICA.AL32UTF8
LC_CTYPE="en_US.UTF-8"
ORA_NCHAR_LITERAL_REPLACE=true
(en_US.UTF-8 ist für Solaris - Linux oder andere Systeme benötigen möglicherweise andere Zeichenfolgen, verwenden Sie locale -a
um unterstützte Gebietsschemata aufzulisten.)
JDBC-Treiber
Anwendungen, die Oracles JDBC-Treiber verwenden, müssen die folgende Systemeigenschaft definiert haben, um Zeichenfolgenliterale in Unicode zu senden.
-Doracle.jdbc.defaultNChar=true
-Doracle.jdbc.convertNcharLiterals=true
SQL-Entwickler
Suchen Sie sqldeveloper.conf und fügen Sie die folgenden Zeilen hinzu:
AddVMOption -Doracle.jdbc.defaultNChar=true
AddVMOption -Doracle.jdbc.convertNcharLiterals=true
SQL Plus unter Microsoft Windows
Ich habe nicht versucht, ob SQLplus unter Microsoft Windows oder Toad überhaupt mit utf-8 umgehen kann. Sqlplusw.exe kann das tun, und die folgenden Registrierungseinstellungen können den Zweck erfüllen.
NLS_LANG=AMERICAN_AMERICA.AL32UTF8
ORA_NCHAR_LITERAL_REPLACE=true