Edycja:należy pamiętać, że najlepszym sposobem obsługi UTF w Oracle jest utworzenie bazy danych przy użyciu zestawu znaków bazy danych AL32UTF8 i użycie zwykłych kolumn varchar2. Jednym z problemów związanych z używaniem kolumn nchar jest to, że Oracle nie może używać indeksów dla zwykłych kolumn char/varchar2, gdy argumenty są domyślnie wysyłane jako nchar.
W każdym razie:jeśli nie możesz przekonwertować bazy danych:
Po pierwsze, literały unicode muszą być poprzedzone „n”, tak:
select n'Language - Språk - Język' from dual;
*) 8-bitowe kodowanie nie obsługuje tego tekstu
Niestety to nie wystarczy.
Z jakiegoś powodu domyślnym zachowaniem klientów bazy danych jest przetłumaczenie wszystkich literałów łańcuchowych na zestaw znaków bazy danych, co oznacza, że wartości zostaną zmienione, zanim baza danych zobaczy łańcuch.
Klienci potrzebują pewnej konfiguracji, aby móc wstawić znak Unicode do kolumny NCHAR lub NVARCHAR:
SQL Plus w systemie Unix
Te zmienne environemnet konfigurują środowisko unix i sqlplus do używania plików UTF-8, a także konfigurują sqlplus do wysyłania literałów łańcuchowych w Unicode.
NLS_LANG=AMERICAN_AMERICA.AL32UTF8
LC_CTYPE="en_US.UTF-8"
ORA_NCHAR_LITERAL_REPLACE=true
(en_US.UTF-8 jest dla systemu Solaris — Linux lub inne systemy mogą wymagać różnych ciągów, użyj locale -a
aby wyświetlić obsługiwane języki).
Sterownik JDBC
Aplikacje korzystające ze sterownika Oracles JDBC muszą mieć zdefiniowaną następującą właściwość systemową, aby wysyłać literały ciągów znaków w Unicode.
-Doracle.jdbc.defaultNChar=true
-Doracle.jdbc.convertNcharLiterals=true
Programista SQL
Znajdź plik sqldeveloper.conf i dodaj następujące wiersze:
AddVMOption -Doracle.jdbc.defaultNChar=true
AddVMOption -Doracle.jdbc.convertNcharLiterals=true
SQL Plus w systemie Microsoft Windows
Nie próbowałem, czy SQLplus w systemie Microsoft Windows lub Toad w ogóle obsługuje utf-8. Sqlplusw.exe może to zrobić, a poniższe ustawienia rejestru mogą załatwić sprawę.
NLS_LANG=AMERICAN_AMERICA.AL32UTF8
ORA_NCHAR_LITERAL_REPLACE=true