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.
| 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:
|
||||||||||
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.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.
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 8CB3 67 65 6E 8B43 6B 69 13 bytes en EBCDIC 0E 4695 0F 87 85 95 0E 45B9 0F 92 89 11 bytes en Unicode UTF-8 E58583 67 65 6E E6B097 6B 69