sql >> Database >  >> RDS >> Oracle

Nationale tekens invoegen in een orakel-NCHAR- of NVARCHAR-kolom werkt niet

Bewerken:Merk op dat de beste manier om met UTF op Oracle om te gaan, is om de database te maken met de databasetekenset AL32UTF8 en gewone varchar2-kolommen te gebruiken. Een van de problemen met het gebruik van nchar-kolommen is dat Oracle geen indexen kan gebruiken voor gewone char/varchar2-kolommen wanneer argumenten standaard als nchar worden verzonden.

Hoe dan ook:als u de database niet kunt converteren:

Ten eerste moeten unicode-letterwoorden worden voorafgegaan door een 'n', zoals deze:

select n'Language - Språk - Język' from dual;

*) 8-bits codering kan deze tekst niet aan

Helaas is dat niet genoeg.

Om de een of andere reden is het standaardgedrag voor databaseclients om alle letterlijke tekenreeksen te vertalen naar de tekenset van de database, wat betekent dat waarden worden gewijzigd zelfs voordat de database de tekenreeks te zien krijgt.

De clients hebben enige configuratie nodig om een ​​unicode-teken in een NCHAR- of NVARCHAR-kolom te kunnen invoegen:

SQL Plus op Unix

Deze environemnet-variabelen stellen de unix-omgeving en sqlplus in om UTF-8-bestanden te gebruiken, en configureren ook sqlplus om letterlijke tekenreeksen in unicode te verzenden.

NLS_LANG=AMERICAN_AMERICA.AL32UTF8
LC_CTYPE="en_US.UTF-8"
ORA_NCHAR_LITERAL_REPLACE=true

(nl_US.UTF-8 is voor Solaris - Linux of andere systemen hebben mogelijk andere strings nodig, gebruik locale -a om ondersteunde landinstellingen weer te geven.)

JDBC-stuurprogramma

Toepassingen die Oracle's JDBC-stuurprogramma gebruiken, moeten de volgende systeemeigenschap hebben gedefinieerd om letterlijke tekenreeksen in unicode te verzenden.

-Doracle.jdbc.defaultNChar=true 
-Doracle.jdbc.convertNcharLiterals=true

SQL-ontwikkelaar

Zoek sqldeveloper.conf en voeg de volgende regels toe:

AddVMOption -Doracle.jdbc.defaultNChar=true 
AddVMOption -Doracle.jdbc.convertNcharLiterals=true

SQL Plus op Microsoft Windows

Ik heb niet geprobeerd of SQLplus op Microsoft Windows of Toad utf-8 überhaupt aankan.Sqlplusw.exe kan dat doen, en de volgende registerinstellingen kunnen het lukken.

NLS_LANG=AMERICAN_AMERICA.AL32UTF8
ORA_NCHAR_LITERAL_REPLACE=true


  1. Geekbench 3 gebruiken om de prestaties van de databaseserver te evalueren

  2. Inleiding tot beveiliging op rijniveau in SQL Server

  3. MySQL-volgorde op beste match

  4. Android sqlite, beperk het aantal rijen in de database