Editar: Tenga en cuenta que la mejor manera de manejar UTF en Oracle es crear la base de datos utilizando el conjunto de caracteres de la base de datos AL32UTF8, y utilizar columnas ordinarias varchar2. Uno de los problemas con el uso de columnas nchar es que Oracle no puede usar índices para las columnas ordinarias char/varchar2 cuando los argumentos se envían como nchar de manera predeterminada.
De todos modos: Si no se puede convertir la base de datos:
En primer lugar, los literales Unicode tiene que ser precedido de una 'N', así:
select n'Language - Språk - Język' from dual;
*) Las codificaciones de 8 bits no pueden manejar este texto
Lamentablemente, eso no es suficiente. Por alguna razón, el comportamiento predeterminado para los clientes de bases de datos es traducir todos los literales de cadena al conjunto de caracteres de la base de datos, , lo que significa que los valores se cambiarán incluso antes de que la base de datos vea la cadena.
Los clientes necesitan alguna configuración con el fin de ser capaz de insertar un carácter Unicode en un NCHAR o NVARCHAR columna:
SQL Plus en Unix
Estas variables environemnet configura el entorno UNIX y sqlplus para usar archivos UTF-8, y también configure sqlplus para enviar literales de cadenas en Unicode.
NLS_LANG=AMERICAN_AMERICA.AL32UTF8
LC_CTYPE="en_US.UTF-8"
ORA_NCHAR_LITERAL_REPLACE=true
(en_US.UTF-8 es para Solaris -. Linux u otros sistemas pueden necesitar diferentes cadenas, utilice locale -a
a la lista localizaciones soportadas)
controlador JDBC
Las aplicaciones que utilizan los oráculos JDBC el controlador necesita tener la siguiente propiedad del sistema definida para enviar cadenas literales en Unicode.
-Doracle.jdbc.defaultNChar=true
-Doracle.jdbc.convertNcharLiterals=true
SQL Developer
Localizar sqldeveloper.conf, y añadir las siguientes líneas:
AddVMOption -Doracle.jdbc.defaultNChar=true
AddVMOption -Doracle.jdbc.convertNcharLiterals=true
SQL Plus en Microsoft Windows
no he probado si SQLPLUS en Microsoft Windows o sapo maneja UTF-8 en absoluto. Sqlplusw.exe puede hacer eso, y la siguiente configuración de registro puede hacer el truco.
NLS_LANG=AMERICAN_AMERICA.AL32UTF8
ORA_NCHAR_LITERAL_REPLACE=true
Estoy auto responder a esta ya he pasado una semana calcular esto ... espero que Google lo encuentra ... – KarlP
Tenga en cuenta que el buen camino para admitir UTF8 en Oracle, es crear la base de datos usando el juego de caracteres de la base de datos AL32UTF8, y usar columnas ordinarias varchar2. – KarlP