Cuando se utilizan funciones de serie en expresiones ESQL, determinados parámetros hacen referencia a recuentos o posiciones de caracteres.
SUBSTRING('Hello World!' FROM 7 FOR 4)
resulta en la serie Worl porque 7 hace referencia a la posición del carácter y 4 hace referencia a cuatro caracteres.Si la serie Hello World! se representa en una página de códigos ASCII, el séptimo byte de esa representación es el séptimo carácter. Sin embargo, en otras páginas de códigos o esquemas de codificación (por ejemplo, algunas representaciones Unicode), el séptimo carácter podría empezar en el 13 y los cuatro caracteres pueden ocupar 8 bytes.
WebSphere Message Broker maneja correctamente esta situación; es decir, los resultados y parámetros numéricos de estas funciones de serie siempre hacen referencia a caracteres y no a los bytes utilizados para representarlos.
En algunas situacines, WebSphere Message Broker delega expresiones a un motor de base de datos para su proceso. Por ejemplo, si hay una cláusula WHERE, en una función SELECT, que se aplica a un origen de datos de base de datos, se pasa la cláusula WHRE a la base de datos si puede interpretar todas las funciones de la expresión.
Si hay funciones a las que la base de datos no da soporte, WebSphere Message Broker pasa sólo esas partes de la expresión que se pueden interpretar, recupera un conjunto de registros no filtrado y realiza el filtrado restante.
Las funciones de serie de DB2 utilizan la indexación en bytes y no en caracteres. Por lo tanto, para datos Unicode, el significado de determinadas funciones difiere de las funciones de WebSphere Message Broker, incluso cuando puedan interpretarse.
Por ejemplo, los caracteres en representación Unicode UTF8 pueden ocupar de uno a cuatro bytes, de modo que el séptimo carácter puede empezar en cualquier lugar del byte 7 al byte 25.
Estas funciones tomarán parámetros numéricos o devolverán resultados numéricos que hacen referencia a índices, o recuentos, de caracteres en una serie.
Cuando las expresiones que incluyen estas funciones se pasan a la base de datos DB2 y se manipulan datos de serie Unicode en la base de datos, los resultados pueden ser inesperados o se puede producir un error.
Este error también puede ocurrir si, por ejemplo, se pasa una expresión de este tipo directamente a la base de datos utilizando la función PASSTHRU. En esta situación, podría modificar cada expresión, cuando sea necesario, para la base de datos de destino.
No es posible modificar de forma sistemática expresiones para evitar este problema y WebSphere Message Broker no intenta hacerlo.
Si las series Unicode no utilizan caracteres que, en representación UTF8, ocupan más de un byte cada uno, las funciones se realizan correctamente.