sql >> Databáze >  >> RDS >> Oracle

Vkládání národních znaků do sloupce Oracle NCHAR nebo NVARCHAR nefunguje

Edit:Všimněte si, že nejlepší způsob, jak zacházet s UTF na Oracle, je vytvořit databázi pomocí znakové sady databáze AL32UTF8 a použít běžné sloupce varchar2. Jedním z problémů používání sloupců nchar je, že Oracle nemůže používat indexy pro běžné sloupce char/varchar2, když jsou argumenty standardně odesílány jako nchar.

Každopádně:Pokud nemůžete převést databázi:

Za prvé, literály unicode musí mít předponu 'n', například takto:

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

*) 8bitové kódování nezvládne tento text

Bohužel to nestačí.

Z nějakého důvodu je výchozím chováním databázových klientů převod všech řetězcových literálů do znakové sady databáze, což znamená, že hodnoty se změní ještě předtím, než databáze řetězec uvidí.

Klienti potřebují určitou konfiguraci, aby mohli vložit znak Unicode do sloupce NCHAR nebo NVARCHAR:

SQL Plus v systému Unix

Tyto proměnné environemnet nastavují unixové prostředí a sqlplus pro použití souborů UTF-8 a také konfigurují sqlplus pro odesílání řetězcových literálů v unicode.

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

(cs_US.UTF-8 je pro Solaris – Linux nebo jiné systémy mohou potřebovat jiné řetězce, použijte locale -a pro seznam podporovaných národních prostředí.)

Ovladač JDBC

Aplikace používající ovladač Oracles JDBC musí mít definovanou následující systémovou vlastnost, aby mohly odesílat řetězcové literály v unicode.

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

Vývojář SQL

Vyhledejte sqldeveloper.conf a přidejte následující řádky:

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

SQL Plus v systému Microsoft Windows

Nezkoušel jsem, jestli SQLplus na Microsoft Windows nebo Toad vůbec zvládá utf-8. Sqlplusw.exe to může udělat a následující nastavení registru může stačit.

NLS_LANG=AMERICAN_AMERICA.AL32UTF8
ORA_NCHAR_LITERAL_REPLACE=true


  1. Co je MySQL ekvivalentem funkce CHOOSE() SQL Serveru?

  2. Jak mohu používat Psycopg2's LoggingConnection?

  3. Naučte se používat databázi MySQL

  4. Doporučený způsob / příkaz číst data z webové služby, analyzovat tato data a vložit je do SQLite db