Aspectos básicos de la codificación de datos
La mayoría de los subsistemas Db2 for z/OS® procesan datos de varios esquemas de codificación u operan en un entorno distribuido en el que las distintas aplicaciones deben comunicarse entre sí. En este entorno, puede ayudar tener un conocimiento básico de páginas de código y CCSID para evitar determinados tipos de problemas de rendimiento o, lo que aún es peor, corrupción de datos.
¿Qué es una página de códigos y un CCSID?
Una página de códigos es una correlación que le dice al sistema qué números hexadecimales representan qué caracteres. Otro término parecido es CCSID. Un CCSID es un número que identifica una implementación de una página de códigos en un momento determinado. Aunque estos términos se utilizan a veces indistintamente, son diferentes. Si no está familiarizado con estos términos y la diferencia entre ellos, lea Páginas de códigos y CCSID.
Db2 for z/OS utiliza valores de CCSID, no números de página de códigos. Para indicar el valor de codificación de algunos datos, especifique el CCSID. Db2 usa este valor CCSID para interpretar los datos. Si no especifica el CCSID correcto, el programa que recibe los datos puede interpretarlos mal o dañarlos.
Cada CCSID pertenece a un esquema de codificación. Los principales esquemas de codificación son EBCDIC, ASCII y Unicode. Para obtener más información sobre los esquemas de codificación y la relación entre los CCSID y los esquemas de codificación, lea Esquemas de codificación.
Cuando los datos se pasan entre sistemas o aplicaciones diferentes, puede que sea necesario convertirlos de un CCSID a otro CCSID. Este proceso se denomina conversión de caracteres. En algunos casos, la conversión de caracteres puede ocurrir dentro de un mismo sistema. Lo mejor es evitar las conversiones de caracteres siempre que sea posible, porque pueden degradar el rendimiento.
¿Qué CCSID utilizan mis subsistemas Db2?
Cada subsistema Db2 for z/OS tiene tres conjuntos de CCSID predeterminados, uno para cada esquema de codificación: ASCII, EBCDIC y Unicode. El administrador del sistema puede establecer el valor para el conjunto ASCII CCSID y el conjunto EBCDIC CCSID. El conjunto CCSID Unicode está predefinido y no se puede cambiar.
Cada subsistema también tiene dos esquemas de codificación predeterminados, uno para el subsistema y uno para las aplicaciones. El valor del subsistema determina el esquema de codificación predeterminado de objetos Db2. El valor de la aplicación determina el esquema de codificación predeterminado de los datos que las aplicaciones pasan a Db2.
Para obtener más información sobre los valores predeterminados de CCSID y esquema de codificación, incluido dónde se especifican, consulte Subsystem CCSIDs and encoding schemes (CCSID y esquemas de codificación de subsistemas ).
Para determinar los valores que están definidos para su subsistema, pregunte a su programador de sistemas o siga el procedimiento en Determinación de los valores actuales del CCSID del subsistema y del esquema de codificación.
Los valores de esquema de codificación y de CCSID predeterminados le afectan de dos formas:
- Potencialmente afectan a cómo crear objetos de base de datos. Consulte los ejemplos siguientes:
- Se crea una tabla y se especifica CCSID EBCDIC en la sentencia CREATE TABLE. Db2 define esa tabla con el valor CCSID EBCDIC predeterminado. Supongamos que el valor del subsistema es 500. Db2 almacena todos los datos de esa tabla codificados en CCSID 500.
- Se crea una tabla y no se define un CCSID. En este caso, Db2 utiliza el esquema de codificación de subsistema predeterminado. Si este valor es EBCDIC y el EBCDIC CCSID predeterminado es 500, la tabla se crea de nuevo con CCSID 500.
- Afectan a cómo escribir aplicaciones que pasan variables a Db2. Supongamos que su aplicación pasa datos a Db2 pero no le dice a Db2 el CCSID de los datos que está pasando. Db2 entonces asume que los datos están en el esquema de codificación de la aplicación predeterminada del subsistema. De nuevo, supongamos que el valor es EBCDIC y que en esta ocasión, el EBCDIC CCSID predeterminado es 37. Db2 interpreta los datos que se están transmitiendo como codificados en CCSID 37. Si los datos se codifican en CCSID 37, este caso de ejemplo funciona correctamente. Sin embargo, si los datos están codificados en otro CCSID, como por ejemplo CCSID 860, Db2 malinterpreta estos datos de la aplicación, que resultan dañados.
¿Qué CCSID están utilizando mis otros orígenes de datos?
Saber los CCSID que están utilizando todos los orígenes de datos es crucial para asegurarse de que los datos se interpretan correctamente y con conversiones mínimas.
Tenga en cuenta el ejemplo en el que ha creado una tabla con CCSID 500. Suponga ahora que está cargando datos en esta tabla, pero los datos que está cargando están codificados en CCSID 37. Supongamos que utiliza el programa de utilidad LOAD y especifique CCSID 37 para los datos de entrada. Los datos se deben convertir de CCSID 37 a CCSID 500. Aunque estos CCSID son parecidos, algunos caracteres tendrán que convertirse. Cuanto mayor sea el número de caracteres que se tienen que convertir, más grande será el impacto en el rendimiento.
Ahora tenga en cuenta el ejemplo en el que la aplicación no especifica el CCSID de los datos que está pasando a Db2. De nuevo, suponga que el esquema de codificación de aplicación predeterminado es EBCDIC y el EBCDIC CCSID predeterminado es 37. Db2 asume que los datos que recibe están en CCSID 37. Sin embargo, suponga que los datos que está pasando a Db2 están realmente en otro CCSID. Por ejemplo, suponga que está pasando caracteres japoneses, codificados en CCSID 281. Db2 está leyendo los datos como si estuvieran codificados en CCSID 37; por lo tanto, los datos están dañados.
Tenga en cuenta un ejemplo más sutil. Suponga que los datos que está pasando están en CCSID 1140. Sólo un punto de código es distinto entre CCSID 37 y CCSID 1140: el carácter en punto de código X'9F'. Si los datos que se pasan a Db2 no contienen este carácter, es posible que ni siquiera note un problema. Suponga, sin embargo, que un día este carácter se pasa a Db2. La aplicación pasa €, pero Db2 lo interpreta utilizando el CCSID 37, que se correlaciona con el valor ¤. Sus datos ahora tienen un carácter dañado, y podría tardar algún tiempo en descubrir el error.
Estos ejemplos muestran la importancia de conocer el CCSID de todos los datos con los que está trabajando. Los recursos siguientes le pueden ayudar a encontrar los valores CCSID de algunos de los orígenes de datos:
- Para encontrar el CCSID de algunas de las fuentes de datos comunes, utilice la tabla en Encontrar los valores CCSID de sus fuentes de datos.
- Para encontrar el CCSID de los objetos Db2 , siga las instrucciones de Determinación del CCSID de los datos Db2.
¿Dónde se especifican los CCSID?
Puede especificar los CCSID para objetos y aplicaciones:
- Para objetos, especifique CCSID cuando los cree. Consulte Especificación de CCSID de objetos para obtener más información.
- Para las aplicaciones Db2 for z/OS, puede especificar un CCSID para el código fuente del programa y un CCSID para las variables. La forma en que especifique el CCSID para el código fuente depende de si utiliza el precompilador de Db2 o el coprocesador de Db2 y el idioma que está utilizando. Para los datos de aplicación (las variables de host y los marcadores de parámetro), generalmente utilice la opción de enlace ENCODING. Para obtener más información sobre el proceso y todas las opciones disponibles, consulte Especificación de un CCSID para su aplicación.
¿Qué es Unicode?
Puede pensar en Unicode como una página de códigos gigante que incluye todos los caracteres. Para una explicación detallada, consulte Unicode y ¿Por qué el estándar Unicode?.
Unicode tiene un par de formatos a los que Db2 for z/OS da soporte: UTF-8 y UTF-16. Estos formatos se explican en UTF y Decidir si almacenar datos como UTF-8 o UTF-16.
Otros recursos de aprendizaje
Consulte Datos internacionales y conversión de caracteres en Db2 for z/OS para obtener una explicación completa de CCSID, Unicode y datos internacionales, incluido cómo especificar la secuencia de clasificación de un idioma y cómo realizar conversiones de mayúsculas y minúsculas culturalmente correctas.
Para obtener más detalles sobre formación en Unicode, utilice los recursos siguientes:
- Curso: "Cómo manejar Unicode y varios CCSID." Puede encontrar enlaces a la información de este curso en la ruta de formación de Administrador de bases de datos de Db2 for z/OS.
- Tutoriales y descripciones generales de Unicode (en el sitio web Unicode Consortium)