Buscador

lunes, 27 de abril de 2015

Implementación de una solución Unicode en la Base de Datos


Implementación de una solución Unicode en la Base de Datos

Caracteres Unicode pueden ser almacenados en una base de datos Oracle de dos maneras: 


  • Puede crear una base de datos Unicode que permita almacenar caracteres codificados en UTF-8 como SQL CHAR (tipos de datos CHAR , VARCHAR2 , CLOB y LONG) . 
  • Si prefiere implementar el soporte Unicode de forma incremental, o si usted necesita datos multilingües sólo en ciertas columnas, entonces usted puede almacenar datos Unicode, ya sea en la forma de codificación UTF-16 o UTF-8 en SQL NCHAR tipos de datos ( NCHAR , NVARCHAR2 y NCLOB ). Los SQL NCHAR se llaman tipos de datos Unicode, ya que sólo se utilizan para almacenar datos Unicode. 

Habilitar la compatibilidad multilingüe con Tipos de datos Unicode


Una alternativa para el almacenamiento de datos Unicode en la base de datos es utilizar los SQL NCHAR tipos de datos ( NCHAR , NVARCHAR , NCLOB ). Puede almacenar caracteres Unicode en columnas de estos tipos de datos, independientemente de cómo se ha definido el conjunto de caracteres base de datos. El NCHAR es exclusivamente un tipo de datos Unicode, lo que significa que almacena datos codificados como Unicode.
Puede crear una tabla utilizando NVARCHAR2 y NCHAR. La longitud de la columna especificada para los NCHAR y NVARCHAR2 columnas siempre es igual al número de caracteres en lugar del número de bytes:


CREATE TABLE product_information 
    (NUMBER product_id (6) 
    , Nombre_producto NVARCHAR2 (100) 
    , Product_description VARCHAR2 (1000));


Puede especificar uno de los siguientes conjuntos de caracteres de Oracle como el juego de caracteres N CHAR:




  • AL16UTF16


Este es el juego de caracteres predeterminado para SQL NCHAR . Este juego de caracteres codifica datos Unicode en la codificación UTF-16. Es compatible con los caracteres complementarios, que se almacenan como cuatro bytes.



  • UTF8

Cuando UTF8 se especifica para SQL NCHAR, los datos almacenados en los tipos de datos SQL está en codificación UTF-8.


NVARCHAR2 especifica una cadena de caracteres de longitud variable que utiliza el juego de caracteres nacional. Cuando se crea una tabla con una columna NVARCHAR2 , se especifica el número máximo de caracteres para la columna. Las longitudes de NVARCHAR2 están siempre en unidades de caracteres , al igual que para NCHAR . 

El tamaño máximo de la columna permitido es 4000 caracteres cuando el juego de caracteres nacional es UTF8 y 2000 cuando es AL16UTF16. La longitud máxima de un NVARCHAR2 columna en bytes es 4000. Tanto el límite de bytes y el límite de caracteres se deben cumplir, por lo que el número máximo de caracteres que se permite en realidad en un NVARCHAR2 ces de 4000 bytes .


En PL / SQL, la longitud máxima para un NVARCHAR2 variable es 32,767 bytes. Puede definir NVARCHAR2 variables de hasta 32.767 caracteres, pero los datos reales no puede exceder de 32.767 bytes.


La siguiente sentencia crea una tabla con una NVARCHAR2 columna cuya máxima longitud en caracteres es 2.000 y la longitud máxima en bytes es 4000.



CREATE TABLE tabla 
    (columna2 NVARCHAR(2000);


AL16UTF16 :
Este es el juego de caracteres predeterminado para SQL NCHAR tipos de datos. Este juego de caracteres codifica datos Unicode en la codificación UTF-16. Es compatible con los caracteres complementarios, que se almacenan como cuatro bytes. 


UTF8 :
Cuando UTF8 se especifica para SQL NCHAR tipos de datos, los datos almacenados en los tipos de datos SQL está en codificación UTF-8. 


Puede especificar el carácter nacional establecido para los SQL NCHAR tipos de datos cuando se crea una base de datos utilizando la NLS_NCHAR_CHARACTERSET cláusula. La siguiente sentencia crea una base de datos con WE8ISO8859P1 como el conjunto de caracteres base de datos y AL16UTF16 como el juego de caracteres nacional.
CREATE DATABASE sample 
CONTROLFILE REUSE 
LOGFILE 
GROUP 1 ('diskx:log1.log', 'disky:log1.log') SIZE 50K, 
GROUP 2 ('diskx:log2.log', 'disky:log2.log') SIZE 50K 
MAXLOGFILES 5 
MAXLOGHISTORY 100 
MAXDATAFILES 10 
MAXINSTANCES 2 
ARCHIVELOG
CHARACTER SET WE8ISO8859P1
NATIONAL CHARACTER SET AL16UTF16 
DATAFILE 
'disk1:df1.dbf' AUTOEXTEND ON, 
'disk2:df2.dbf' AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED 
DEFAULT TEMPORARY TABLESPACE temp_ts 
UNDO TABLESPACE undo_ts 
SET TIME_ZONE = '+02:00';

Inconvenientes

Tenga en cuenta que la mejor manera de manejar UTF en Oracle es crear la base de datos utilizando la base de datos de carácter conjunto AL32UTF8, y utilizar columnas VARCHAR2 ordinarios. Uno de los problemas con el uso de columnas nchar es que Oracle no puede utilizar índices para las columnas char / VARCHAR2 ordinarios cuando los argumentos se envían como nchar por defecto.

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


Por alguna razón, el comportamiento por defecto para los clientes de bases de datos es traducir todos los literales de cadena para el conjunto de caracteres base de datos, lo que significa que los valores serán cambiados, incluso antes de la base de datos llega a ver la cadena.


Los clientes necesitan un poco de configuración con el fin de ser capaz de insertar un carácter Unicode en una columna NCHAR o NVARCHAR:
JDBC Driver
Las aplicaciones que utilizan controlador Oráculos JDBC necesita tener la siguiente propiedad del sistema definido para enviar cadenas literales en Unicode.

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

Fuentes:
http://docs.oracle.com/cd/B19306_01/server.102/b14225/ch7progrunicode.htm





No hay comentarios:

Publicar un comentario