Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Wstawianie znaków narodowych do kolumny oracle NCHAR lub NVARCHAR nie działa

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Używanie CONTINUE In Loops do wznowienia kontroli w Oracle

  2. Baza danych menedżera pakietów RPM GI 19c

  3. Sprawdź, czy dwa wybory są równoważne

  4. Czy istnieje wyrażenie CASE w JPQL?

  5. ORA-24408:nie można wygenerować unikalnej nazwy grupy serwerów