Conversión con expansión

Una conversión con expansión se da cuando la longitud de la serie convertida es mayor que la de la serie de origen.

Por ejemplo, se produce una conversión con expansión cuando una serie de datos mixtos ASCII que contiene caracteres DBCS se convierte en una serie de datos mixtos EBCDIC. La expansión se produce debido a la adición de caracteres de control de desplazamiento de teclado estándar y caracteres de control de desplazamiento a teclado estándar. También pueden producirse conversiones con expansión cuando los datos de una serie se convierten a o desde Unicode.

Las conversiones con expansión suelen afectar a los idiomas europeos y de Asia Pacífico. Por ejemplo, el nombre alemán Jürgen se expande cuando se convierte de ASCII o EBCDIC a Unicode. Las series en japonés, coreano y chino también se expanden cuando se convierten de ASCII a EBCDIC.

Las conversiones con expansión pueden tener los siguientes efectos en Db2:

  • Las conversiones con expansión pueden provocar problemas con las variables de longitud fija. Por ejemplo, cuando una variable host de longitud fija debe convertirse de datos mixtos ASCII a datos mixtos EBCDIC, se produce un error. El problema se produce porque la conversión es una conversión con expansión, pero la variable host es de longitud fija. La solución es utilizar una variable de longitud variable con una longitud máxima suficiente para contener la expansión.
  • Las conversiones con expansión pueden afectar a las series de longitud fija. Si utiliza una cadena de longitud fija y se produce una conversión expansiva, Db2 trunca la cadena. Db2 examina los caracteres que se están truncando para garantizar que no se trunquen datos importantes. Por ejemplo, los espacios en blanco al final no son significativos. En este caso, plantéese el uso del tipo de datos VARCHAR para estas series.
  • Las conversiones con expansión pueden afectar a los resultados de las funciones de longitud, como LENGTH, CHARACTER_LENGTH, SUBSTRING y SUBSTR, en la serie convertida. Para CHARACTER_LENGTH y SUBSTRING, utilice las opciones CODEUNITS16 y CODEUNITS32 para limitar los efectos de las conversiones con expansión.
  • Las conversiones con expansión pueden afectar a la longitud de los nombres de los objetos, como los nombres de las tablas y de las columnas. Para evitar estos problemas puede dejar de utilizar caracteres especiales en los nombres de objeto.

Para determinar la longitud resultante de una conversión de CCSID en el peor de los casos, utilice la tabla siguiente.

Tabla 1. Longitud resultante de la longitud del CCSID en el peor de los casos, donde X representa LENGTH(serie en bytes)
Del CCSID Al CCSID
EBCDIC ASCII Unicode
SBCS Mixto DBCS SBCS Mixto DBCS SBCS UTF-8 UTF-16
EBCDIC SBCS X X X*21 X X X*21 X1 X*3 X*2
Mixto X X X*21 X X X*21 X1 X*3 X*2
DBCS X*0,51 X+2 X X*0,51 X X X*0.5 X*1.5 X
ASCII SBCS X X X*21 X X X*21 X1 X*3 X*2
Mixto X X*1.8 X*21 X X X*21 X1 X*3 X*2
DBCS X*0,51 X+2 X X*0,51 X X X*0.5 X*1.5 X
Unicode SBCS X X X*2 X X X*2 X X X*2
UTF-8 X X*1.25 X X X X X X X*2
UTF-16 X*0.5 X+2 X X*0.5 X X X*0.5 X*1.5 X
Nota:
  1. Debido a la alta probabilidad de pérdida de datos, IBM® no proporciona tablas de conversión para esta combinación de dos CCSID y subtipos de datos.

ejemplos

Ejemplo
En ASCII CCSID 819, el carácter Å se representa mediante el punto de código X' C5 '. En el CCSID UTF-8 1208, este carácter se representa mediante X'C385'. Por lo tanto, la conversión del carácter Å de CCSID 819 a CCSID 1208 es una conversión en expansión.
Ejemplo
En la tabla siguiente se muestra una serie de caracteres Kanji y latinos con diferentes esquemas de codificación.
Tabla 2. Ejemplo de una serie de caracteres en distintos esquemas de codificación
Tipo de datos y esquema de codificación Representación de caracteres Representación hexadecimal (con espacios que separan cada carácter)
9 bytes en ASCII
Comenzar descripción de figura. Una serie consta de un carácter Kanji, los caracteres en minúsculas del alfabeto latino
gen, otro carácter Kanji y los caracteres en minúsculas del alfabeto latino ki. Finalizar descripción de figura.
8CB3 67 65 6E 8B43 6B 69
13 bytes en EBCDIC
Comenzar descripción de figura. Una serie es un desplazamiento desde teclado estándar, un carácter Kanji, un desplazamiento a teclado estándar, los caracteres g e n, un desplazamiento desde teclado estándar, un carácter Kanji, un desplazamiento a teclado estándar, y los caracteres k i. Finalizar descripción de figura.
0E 4695 0F 87 85 95 0E 45B9 0F 92 89
11 bytes en Unicode UTF-8
Comenzar descripción de figura. Una serie consta de un carácter Kanji, los caracteres en minúsculas del alfabeto latino
gen, otro carácter Kanji y los caracteres en minúsculas del alfabeto latino ki. Finalizar descripción de figura.
E58583 67 65 6E E6B097 6B 69
Si convierte esta serie de ASCII a EBCDIC, observará que se añaden caracteres de carácter de desplazamiento a y desde teclado estándar. Esta conversión es un ejemplo de conversión con expansión. La longitud aumenta de 9 a 13 bytes.