sql >> Base de Datos >  >> RDS >> Oracle

Insertar caracteres nacionales en una columna Oracle NCHAR o NVARCHAR no funciona

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 usar columnas varchar2 ordinarias. Uno de los problemas con el uso de columnas nchar es que Oracle no puede usar índices para columnas char/varchar2 ordinarias cuando los argumentos se envían como nchar de forma predeterminada.

De todos modos:si no puede convertir la base de datos:

Primero, los literales Unicode deben tener el prefijo 'n', como este:

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

*) Las codificaciones de 8 bits no pueden manejar este texto

Desafortunadamente, eso no es suficiente.

Por alguna razón, el comportamiento predeterminado para los clientes de la base de datos es traducir todos los literales de cadena al conjunto de caracteres de la base de datos, lo que significa que los valores cambiarán incluso antes de que la base de datos vea la cadena.

Los clientes necesitan alguna configuración para poder insertar un carácter Unicode en una columna NCHAR o NVARCHAR:

SQL Plus en Unix

Estas variables ambientales configuran el entorno Unix y sqlplus para usar archivos UTF-8, y también configuran sqlplus para enviar cadenas literales 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 cadenas diferentes, use locale -a para enumerar las configuraciones regionales admitidas).

Controlador JDBC

Las aplicaciones que utilizan el controlador JDBC de Oracle deben tener definida la siguiente propiedad del sistema para enviar literales de cadenas en Unicode.

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

Desarrollador SQL

Localice sqldeveloper.conf y agregue 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 Toad maneja utf-8 en absoluto. Sqlplusw.exe puede hacer eso, y las siguientes configuraciones de registro pueden ser la solución.

NLS_LANG=AMERICAN_AMERICA.AL32UTF8
ORA_NCHAR_LITERAL_REPLACE=true