Oracle
 sql >> база данни >  >> RDS >> Oracle

Вмъкването на национални знаци в колона NCHAR или NVARCHAR на оракул не работи

Редактиране:Обърнете внимание, че най-добрият начин за работа с UTF на Oracle е да създадете базата данни с помощта на набора от знаци на базата данни AL32UTF8 и да използвате обикновени колони varchar2. Един от проблемите с използването на колони nchar е, че Oracle не може да използва индекси за обикновени колони char/varchar2, когато аргументите се изпращат като nchar по подразбиране.

Както и да е:Ако не можете да конвертирате базата данни:

Първо, Unicode литералите трябва да бъдат с префикс 'n', като това:

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

*) 8-битовите кодировки не могат да се справят с този текст

За съжаление това не е достатъчно.

По някаква причина поведението по подразбиране за клиентите на базата данни е да превеждат всички низови литерали в набора от знаци на базата данни, което означава, че стойностите ще бъдат променени дори преди базата данни да види низа.

Клиентите се нуждаят от някаква конфигурация, за да могат да вмъкнат уникод символ в колона NCHAR или NVARCHAR:

SQL Plus на Unix

Тези променливи environemnet настройват unix средата и sqlplus да използват UTF-8 файлове и също така конфигурират sqlplus да изпраща низови литерали в unicode.

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

(en_US.UTF-8 е за Solaris - Linux или други системи може да се нуждаят от различни низове, използвайте locale -a за да изброите поддържаните локали.)

JDBC драйвер

Приложенията, използващи Oracles JDBC драйвер, трябва да имат следното системно свойство, дефинирано, за да изпращат низови литерали в unicode.

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

Разработчик на SQL

Намерете sqldeveloper.conf и добавете следните редове:

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

SQL Plus на Microsoft Windows

Не съм пробвал дали SQLplus на Microsoft Windows или Toad изобщо се справя с utf-8. Sqlplusw.exe може да направи това, а следните настройки на системния регистър могат да свършат работа.

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. Oracle Entity Framework - Генерирайте обект от таблици в различна схема

  2. Потребителска парола за гост в 11i/R12

  3. Oracle, PDO_OCI срещу OCI8

  4. dbms_output препълване на буфер с размер

  5. EM SQL Monitor Impact