Bearbeiten: Beachten Sie, dass der beste Weg, um UTF auf Oracle zu behandeln, ist, die Datenbank mit dem Datenbankzeichensatz AL32UTF8 zu erstellen und normale varchar2-Spalten zu verwenden. Eines der Probleme bei der Verwendung von nchar-Spalten ist, dass Oracle keine Indizes für normale 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, etwa so:
select n'Language - Språk - Jezyk' from dual;
*) 8-Bit-Kodierungen können diesen Text nicht verarbeiten
Leider ist das nicht genug.
Aus irgendeinem Grund ist das Standardverhalten für Datenbankclients, alle Stringliterale in den Datenbankzeichensatz zu übersetzen, Das bedeutet, dass die Werte geändert werden, noch bevor die Datenbank die Zeichenkette zu sehen bekommt.
Die Clients benötigen einige Konfigurationen, 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 für die Verwendung von UTF-8-Dateien ein, und konfigurieren sqlplus so, dass es String-Literale in Unicode sendet.
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 Zeichenketten, verwenden Sie locale -a
um die unterstützten Sprachumgebungen aufzulisten).
JDBC-Treiber
Anwendungen, die Oracles JDBC-Treiber verwenden, müssen die folgende Systemeigenschaft definieren, um Zeichenkettenliterale in Unicode zu senden.
-Doracle.jdbc.defaultNChar=true
-Doracle.jdbc.convertNcharLiterals=true
SQL-Entwickler
Suchen Sie die Datei 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 ausprobiert, 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 Trick bewirken.
NLS_LANG=AMERICAN_AMERICA.AL32UTF8
ORA_NCHAR_LITERAL_REPLACE=true