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