sql >> Databasteknik >  >> RDS >> Oracle

Att infoga nationella tecken i en oracle NCHAR eller NVARCHAR kolumn fungerar inte

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


  1. Autentiseringsplugin 'caching_sha2_password' kan inte laddas

  2. Refaktorera främmande nyckel till fält

  3. Importera .csv-fil till ett Oracle Forms-program

  4. Hur man undviker tabellmuteringsfel