Redigera:Observera att det bästa sättet att hantera UTF på Oracle är att skapa databasen med hjälp av databasteckenuppsättningen AL32UTF8 och använda vanliga varchar2-kolumner. Ett av problemen med att använda nchar-kolumner är att Oracle inte kan använda index för vanliga char/varchar2-kolumner när argument skickas som nchar som standard.
Hur som helst:Om du inte kan konvertera databasen:
Först måste unicode-literaler ha prefixet "n", så här:
select n'Language - Språk - Język' from dual;
*) 8-bitars kodningar kan inte hantera denna text
Tyvärr räcker det inte.
Av någon anledning är standardbeteendet för databasklienter att översätta alla bokstavliga strängar till databasens teckenuppsättning, vilket innebär att värden kommer att ändras även innan databasen får se strängen.
Klienterna behöver viss konfiguration för att kunna infoga ett unicode-tecken i en NCHAR- eller NVARCHAR-kolumn:
SQL Plus på Unix
Dessa environemnet-variabler ställer in unix-miljön och sqlplus för att använda UTF-8-filer, och konfigurerar även sqlplus för att skicka strängliteraler i unicode.
NLS_LANG=AMERICAN_AMERICA.AL32UTF8
LC_CTYPE="en_US.UTF-8"
ORA_NCHAR_LITERAL_REPLACE=true
(en_US.UTF-8 är för Solaris - Linux eller andra system kan behöva andra strängar, använd locale -a
för att lista vilka språk som stöds.)
JDBC-drivrutin
Applikationer som använder Oracles JDBC-drivrutin måste ha följande systemegenskap definierad för att kunna skicka bokstavssträngar i unicode.
-Doracle.jdbc.defaultNChar=true
-Doracle.jdbc.convertNcharLiterals=true
SQL-utvecklare
Leta upp sqldeveloper.conf och lägg till följande rader:
AddVMOption -Doracle.jdbc.defaultNChar=true
AddVMOption -Doracle.jdbc.convertNcharLiterals=true
SQL Plus på Microsoft Windows
Jag har inte provat om SQLplus på Microsoft Windows eller Toad överhuvudtaget hanterar utf-8. Sqlplusw.exe kan göra det, och följande registerinställningar kan göra susen.
NLS_LANG=AMERICAN_AMERICA.AL32UTF8
ORA_NCHAR_LITERAL_REPLACE=true