Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Inserir caracteres nacionais em uma coluna oracle NCHAR ou NVARCHAR não funciona


Editar:Observe que a melhor maneira de lidar com UTF no Oracle é criar o banco de dados usando o conjunto de caracteres de banco de dados AL32UTF8 e usar colunas varchar2 comuns. Um dos problemas com o uso de colunas nchar é que o oracle não pode usar índices para colunas char/varchar2 comuns quando os argumentos são enviados como nchar por padrão.

De qualquer forma:Se você não pode converter o banco de dados:

Primeiro, os literais unicode precisam ser prefixados com um 'n', assim:
select n'Language - Språk - Język' from dual;

*) Codificações de 8 bits não podem lidar com este texto

Infelizmente, isso não é suficiente.

Por alguma razão, o comportamento padrão para clientes de banco de dados é traduzir todos os literais de string para o conjunto de caracteres do banco de dados, o que significa que os valores serão alterados antes mesmo que o banco de dados veja a string.

Os clientes precisam de alguma configuração para poder inserir um caractere unicode em uma coluna NCHAR ou NVARCHAR:

SQL Plus no Unix

Essas variáveis ​​environemnet configuram o ambiente unix e o sqlplus para usar arquivos UTF-8 e também configuram o sqlplus para enviar literais de string em unicode.
NLS_LANG=AMERICAN_AMERICA.AL32UTF8
LC_CTYPE="en_US.UTF-8"
ORA_NCHAR_LITERAL_REPLACE=true

(en_US.UTF-8 é para Solaris - Linux ou outros sistemas podem precisar de strings diferentes, use locale -a para listar as localidades suportadas.)

Driver JDBC

Os aplicativos que usam o driver JDBC Oracles precisam ter a seguinte propriedade de sistema definida para enviar literais de strings em unicode.
-Doracle.jdbc.defaultNChar=true 
-Doracle.jdbc.convertNcharLiterals=true

Desenvolvedor SQL

Localize sqldeveloper.conf e adicione as seguintes linhas:
AddVMOption -Doracle.jdbc.defaultNChar=true 
AddVMOption -Doracle.jdbc.convertNcharLiterals=true

SQL Plus no Microsoft Windows

Eu não tentei se SQLplus no Microsoft Windows ou Toad lida com utf-8.Sqlplusw.exe pode fazer isso, e as seguintes configurações de registro podem fazer o truque.
NLS_LANG=AMERICAN_AMERICA.AL32UTF8
ORA_NCHAR_LITERAL_REPLACE=true