Literales de cadena mvSQL en Jitterbit App Builder
El estándar SQL define dos tipos de cadenas de caracteres, cada una con su propia sintaxis literal.
- ANSI
- Nacional
Las cadenas de caracteres ANSI representan ASCII y otros conjuntos de caracteres de un solo byte, como EBCDIC en DB2/i.
Las cadenas de caracteres nacionales representan conjuntos de caracteres de múltiples bytes, como Unicode.
El estándar SQL define una sintaxis literal separada para cada tipo de cadena de caracteres. La sintaxis para un literal de cadena ANSI es:
'Citas de Aristóteles'
Tenga en cuenta que las comillas simples incrustadas dentro del literal de cadena se escapan duplicando la comilla simple.
La sintaxis para un literal de cadena nacional es:
N'Citas de Aristóteles'
mvSQL admite la sintaxis del estándar SQL para literales de cadenas de caracteres ANSI y nacionales.
Nota
Usar la sintaxis literal SQL incorrecta puede resultar en una degradación significativa del rendimiento. Dada una columna que almacena datos en un conjunto de caracteres ANSI, una condición de búsqueda que contenga un literal de cadena nacional no aprovechará ningún índice y forzará una conversión de los valores de la columna.
Algunos motores de bases de datos, como Oracle, no admiten conversiones implícitas entre conjuntos de caracteres. Usar la sintaxis de literal de cadena de caracteres apropiada evitará errores y eliminará la necesidad de conversiones explícitas.
Soporte del proveedor
A menos que se documente lo contrario, los literales de cadena de caracteres ANSI y nacionales se mapean directamente al equivalente nativo del proveedor.
MySQL
MySQL no define una sintaxis separada para literales de cadena de caracteres ANSI y nacionales. En MySQL, se asume que el literal de cadena está codificado utilizando el conjunto de caracteres de la conexión. Esto significa que la codificación puede variar según la configuración de la conexión. Si la conexión utiliza una codificación ANSI (como la codificación predeterminada latin1), entonces se asume que todas las cadenas son ANSI.
Nota
App Builder establece por defecto las conexiones MySQL en el conjunto de caracteres UTF-8. Use el parámetro CharSet para cambiar el conjunto de caracteres de la conexión MySQL. Por ejemplo, para usar el conjunto de caracteres ASCII predeterminado de MySQL, agregue CharSet=latin1 a la configuración avanzada.
MySQL admite introductores de conjunto de caracteres. El "introductor" es un prefijo que se agrega al principio del valor literal de cadena. El prefijo indica el conjunto de caracteres de la cadena. App Builder utiliza introductores de conjunto de caracteres para garantizar que los datos Unicode se puedan codificar en literales de cadena, independientemente de la configuración de conexión. Por el contrario, si la conexión utiliza el conjunto de caracteres UTF-8, el introductor de conjunto de caracteres asegura que los datos ASCII se envíen al servidor como ASCII, evitando conversiones problemáticas.
En la práctica, esto significa que un literal de cadena de caracteres ANSI de mvSQL se traducirá a:
_latin1'Aristóteles'' citas'
Un literal de cadena de caracteres nacional de mvSQL se traducirá a la sintaxis de MySQL como:
_utf8'Aristóteles'' citas'
MySQL no define tipos de datos de almacenamiento separados para tipos de caracteres ANSI y Nacionales. En cambio, todos los tipos de cadena se almacenan en un tipo de datos común. El conjunto de caracteres determina cómo se almacenan los datos. App Builder asigna columnas de caracteres de MySQL con un conjunto de caracteres Unicode (utf8) al tipo de cadena de caracteres nacional correspondiente y neutral al proveedor (por ejemplo, NCHAR o NVARCHAR).
DB2/i
Al igual que MySQL, DB2/i no tiene tipos de datos separados para cadenas de caracteres ANSI y Nacionales. En cambio, el CCSID determina la codificación. El CCSID es un entero sin signo de 16 bits. Es similar en naturaleza al LCID de Windows.
Al igual que con MySQL, App Builder inspecciona el CCSID para mapear correctamente de un tipo de carácter de DB2/i (por ejemplo, VARCHAR) a un tipo de datos neutral al proveedor de App Builder (por ejemplo, NVARCHAR). Los siguientes CCSIDs se mapearán al tipo de datos NVARCHAR:
- 1200 - UTF-16
- 1208 - UTF-8
- 13488 - UCS-2
Por el contrario, al crear columnas con un tipo de datos de carácter nacional, App Builder establece explícitamente el CCSID. Específicamente, App Builder establece el CCSID en 1208 (UTF-8).
Finalmente, DB2/i no necesita tener una sintaxis separada para cadenas de caracteres ANSI y Nacionales. Por lo tanto, se utiliza la misma sintaxis para ambos.
Fuentes de datos no RDBMS
Los literales de cadena nacional de mvSQL no son compatibles con fuentes de datos no RDBMS como REST y Salesforce, etc.
Lectura adicional
https://learn.microsoft.com/en-us/sql/relational-databases/collations/collation-and-unicode-support
https://docs.microsoft.com/en-us/sql/t-sql/data-types/constants-transact-sql
https://dev.mysql.com/doc/refman/8.0/en/charset-introducer.html