Rediger:Bemærk, at den bedste måde at håndtere UTF på Oracle er at oprette databasen ved at bruge databasetegnsættet AL32UTF8 og bruge almindelige varchar2-kolonner. Et af problemerne med at bruge nchar-kolonner er, at Oracle ikke kan bruge indekser til almindelige char/varchar2-kolonner, når argumenter sendes som nchar som standard.
Anyway:Hvis du ikke kan konvertere databasen:
For det første skal unicode-literaler foranstilles med et 'n', sådan her:
select n'Language - Språk - Język' from dual;
*) 8-bit-kodninger kan ikke håndtere denne tekst
Det er desværre ikke nok.
Af en eller anden grund er standardadfærden for databaseklienter at oversætte alle strenge bogstaver til databasens tegnsæt, hvilket betyder, at værdierne vil blive ændret, selv før databasen kan se strengen.
Klienterne har brug for en vis konfiguration for at kunne indsætte et unicode-tegn i en NCHAR- eller NVARCHAR-kolonne:
SQL Plus på Unix
Disse environemnet-variabler sætter unix-miljøet og sqlplus op til at bruge UTF-8-filer, og konfigurerer også sqlplus til at sende strenge bogstaver i unicode.
NLS_LANG=AMERICAN_AMERICA.AL32UTF8
LC_CTYPE="en_US.UTF-8"
ORA_NCHAR_LITERAL_REPLACE=true
(da_US.UTF-8 er til Solaris - Linux eller andre systemer kan have brug for andre strenge, brug locale -a
for at vise understøttede lokaliteter.)
JDBC-driver
Programmer, der bruger Oracles JDBC-driver, skal have følgende systemegenskab defineret for at sende strenge bogstaver i unicode.
-Doracle.jdbc.defaultNChar=true
-Doracle.jdbc.convertNcharLiterals=true
SQL-udvikler
Find sqldeveloper.conf, og tilføj følgende linjer:
AddVMOption -Doracle.jdbc.defaultNChar=true
AddVMOption -Doracle.jdbc.convertNcharLiterals=true
SQL Plus på Microsoft Windows
Jeg har ikke prøvet, om SQLplus på Microsoft Windows eller Toad overhovedet håndterer utf-8. Det kan Sqlplusw.exe gøre, og følgende indstillinger i registreringsdatabasen kan gøre tricket.
NLS_LANG=AMERICAN_AMERICA.AL32UTF8
ORA_NCHAR_LITERAL_REPLACE=true