sql >> Database teknologi >  >> RDS >> Oracle

Indsættelse af nationale tegn i en orakel NCHAR eller NVARCHAR kolonne virker ikke

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


  1. Hvordan iif() virker i SQLite

  2. Sådan bruges FILEPROPERTY() i SQL Server

  3. Sammenføjning af tre borde ved hjælp af MySQL

  4. Hvordan opretter man json-format med group-concat mysql?