Creación de una tabla Unicode

Si tiene la intención de almacenar datos Unicode, cree tablas Unicode. Si intenta insertar datos Unicode en una tabla ASCII o EBCDIC, podrían perderse datos, a menos que utilice datos con escape.

Acerca de esta tarea

Recomendación : Cuando cree objetos, utilice caracteres estándar para los nombres de los objetos y de las columnas. Los caracteres especiales, como ü o é, pueden complicar sus solicitudes si es necesario realizar conversiones.

Procedimiento

Para crear una tabla Unicode:

  1. En la sentencia CREATE DATABASE, CREATE TABLESPACE o CREATE TABLE, especifique la cláusula CCSID UNICODE.

    De forma predeterminada, el esquema de codificación de una tabla es el mismo que el de su espacio de tablas. También de forma predeterminada, el esquema de codificación del espacio de tabla es el mismo que el de su base de datos. Puede alterar temporalmente el esquema de codificación con la cláusula CCSID en la sentencia CREATE TABLESPACE o CREATE TABLE. Sin embargo, todas las tablas que estén dentro de un espacio de tablas deben tener el mismo CCSID.

  2. En la sentencia CREATE TABLE, para cada definición de columna, especifique el tipo de datos, subtipo y el valor de longitud adecuados.
    tipo de datos

    Utilice uno de los tipos de datos siguientes:

    • En el caso de datos UTF-8, cree columnas de tipo CHAR, VARCHAR o CLOB.
    • En el caso de datos UTF-16, cree columnas de tipo GRAPHIC, VARGRAPHIC o DBCLOB.
    • Para datos binarios, cree columnas de tipo BINARY, VARBINARY y BLOB.
    Recomendación : En general, utilice columnas de longitud variable para tablas Unicode porque el número de bytes en una columna Unicode suele ser de dos a tres veces mayor que el de una columna EBCDIC.

    La directriz general consiste en utilizar la longitud variable para columnas mayores de 18 bytes, a menos que sepa que toda la columna debe llenarse siempre. Por ejemplo, si almacena una indicación de fecha y hora en formato de caracteres (no como el tipo de datos de Db2 TIMESTAMP), necesita una columna con un determinado número de caracteres. En DB2® 9, ese número sería de 26 caracteres. (En ASCII, EBCDIC o UTF-8, esa columna es de 26 bytes. En UTF-16, esa columna es de 52 bytes.) Puesto que la indicación de fecha y hora siempre tiene el mismo tamaño, utilizar una columna de longitud variable no ahorra almacenamiento. No obstante, supongamos que tiene un campo de nombre que está en ASCII o EBCDIC y que permite nombres de 26 caracteres. (En SBCS ASCII o SBCS EBCDIC, puede utilizar 26 bytes. En UTF-8, necesita 78 bytes. En UTF-16, necesita 52 bytes.) En este caso, desea utilizar una columna de longitud variable, porque es probable que el campo de nombre tenga muchos espacios en blanco y que no desee almacenarlos.

    subtipo
    Para caracteres de columnas, opcionalmente puede especificar uno de los subtipos siguientes añadiendo la cláusula FOR subtipo DATA a la definición de columna:
    SBCS
    Especifique este subtipo si la columna debe contener solo aquellos caracteres UTF-8 almacenados como 1 byte. Estos caracteres serán los primeros 128 caracteres en la página de códigos Unicode. Los datos que se almacenen en una columna de caracteres SBCS en una tabla Unicode tendrán el CCSID 367.
    MIXED
    Especifique este subtipo si la columna debe contener solo cualesquiera caracteres UTF-8 que tengan más de 1 byte. MIXED es el valor predeterminado. Los datos de caracteres de una tabla Unicode se almacenan como datos mixtos de forma predeterminada, aunque el subsistema esté definido con un valor de DECP MIXED igual a NO. Los datos que se almacenan en una columna de caracteres MIXED en una tabla Unicode tienen un CCSID igual a 1208.
    BIT
    Este subtipo especifica que la columna contiene datos BIT. Se asocia el CCSID 66534 a las columnas FOR BIT DATA.
    Recomendación : Aunque también puede especificar el subtipo BIT para las columnas CHAR y VARCHAR que contienen datos BIT, utilice en su lugar los tipos de datos BINARY o VARBINARY.

    No utilice columnas FOR BIT DATA con el único propósito de manejar datos internacionales. Utilice solamente columnas FOR BIT DATA si tiene un motivo específico, como cifrado. De lo contrario, este tipo de datos puede ocasionar problemas. Por ejemplo, si tiene una serie de longitud 10 y la coloca en una columna FOR BIT DATA de longitud 12, Db2 rellena la serie con dos espacios en blanco. El valor hexadecimal que se utiliza para estos espacios es específico del sistema. Por ejemplo, X'40' se utiliza para EBCDIC, mientras que X'20' se utiliza para Unicode. Estos valores hexadecimales pueden producir posibles problemas al convertir estos datos.

    longitud
    Para determinar el valor de longitud adecuado, siga las instrucciones de la sección Estimación del tamaño de columna para datos Unicode.

    Db2 asocia un determinado CCSID con la columna en función del tipo de datos que especifique. En la tabla siguiente se resumen los tipos de datos de columna posibles en una tabla Unicode y los CCSID que se asocian a los datos de esas columnas.

    Tabla 1. CCSID que se asocian a columnas en una tabla Unicode
    Tipo de datos de columna CCSID asociado Formato en el que se almacenan los datos
    CHAR3.a 1208 UTF-8
    CHAR FOR SBCS DATA 367 ASCII de 7 bits
    CHAR FOR MIXED DATA 1208 UTF-8
    CHAR FOR BIT DATA 66534 N/D
    VARCHAR3.a 1208 UTF-8
    VARCHAR FOR SBCS DATA 367 ASCII de 7 bits
    VARCHAR FOR MIXED DATA 1208 UTF-8
    VARCHAR FOR BIT DATA 66534 N/D
    CLOB3.a 1208 UTF-8
    CLOB FOR SBCS DATA 367 ASCII de 7 bits
    CLOB FOR MIXED DATA 1208 UTF-8
    GRAPHIC 1200 UTF-16
    VARGRAPHIC 1200 UTF-16
    DBCLOB 1200 UTF-16
    Nota:
    1. Si no especifica un subtipo, Db2 supone FOR MIXED DATA.

Ejemplo

Iniciar información de la interfaz de programación de uso general.La siguiente sentencia CREATE TABLE crea una tabla Unicode.
CREATE TABLE UNITAB
 (C1 CHAR(4)FOR SBCS DATA,
  C2 CHAR(4),
  C3 GRAPHIC(4),
  C4 VARCHAR(4) FOR SBCS DATA,
  C5 VARCHAR(4),
  C6 VARGRAPHIC(4))
CCSID Unicode
Finalizar la información de la interfaz de programación de uso general.

Las columnas C1 y C4 solo pueden contener datos UTF-8 de 1 byte. (Estos datos tienen el CCSID 367 y se almacenan en formato ASCII de 7 bits.) Las columnas C2 y C5 pueden contener cualquier dato UTF-8. Las columnas C3® y C6 pueden contener datos de UTF-16.

Las columnas CHAR y VARCHAR tienen una longitud de 4 bytes cada una. Esta longitud implica que cada una de estas columnas pueden contener uno de los caracteres o conjuntos de caracteres siguientes:
  • Un carácter UTF-8 que tenga 4 bytes
  • Dos caracteres UTF-8 que tengan 2 bytes cada uno
  • Un carácter UTF-8 de 3 bytes y un carácter UTF-8 de un byte
  • Cuatro caracteres UTF-8 de un byte
Las columnas GRAPHIC y VARGRAPHIC tienen cada una longitud de 4 unidades de código UTF-16. (Una unidad de código UTF-16 tiene 16 bits o 2 bytes.) Para caracteres UTF-16 que tengan 2 bytes, esta longitud implica 4 caracteres. Sin embargo, esta longitud no siempre se traduce en 4 caracteres. Tenga en cuenta los caracteres suplementarios UTF-16, cada uno de los cuales son dos unidades de código UTF-16 o 4 bytes. Si incluye caracteres suplementarios en la columna, la columna no puede incluir 4 caracteres. De este modo, la longitud de esta columna puede contener 2, 3 o 4 caracteres, en función del tamaño del carácter. Por ejemplo, cada una de estas columnas GRAPHIC y VARGRAPHIC pueden contener uno de los caracteres o conjuntos de caracteres siguientes:
  • Cuatro caracteres UTF-16 de 2 bytes
  • Dos caracteres UTF-16 de 4 bytes
  • Un carácter UTF-16 de 4 bytes y dos caracteres UTF-16 de 2 bytes