Literales de Cadena Mvsql
El estándar SQL define dos tipos de cadenas de caracteres, cada uno con su propia sintaxis literal.
- Normas 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 multibyte como Unicode.
El estándar SQL define una sintaxis literal independiente para cada tipo de cadena de caracteres. La sintaxis para una cadena literal ANSI es:
'Aristotle''s quotes'
Tenga en cuenta que las comillas simples incrustadas dentro de la cadena literal se escapan duplicando la comilla simple.
La sintaxis para una cadena literal nacional es:
N'Aristotle''s quotes'
mvSQL admite la sintaxis estándar de SQL para cadenas literales de caracteres ANSI y nacionales.
Nota
El uso de una sintaxis literal SQL incorrecta puede provocar 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 una cadena literal 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. El uso de la sintaxis literal de cadena de caracteres adecuada evitará errores y obviará la necesidad de conversiones explícitas.
Soporte del Proveedor
A menos que se indique lo contrario, los literales de cadena de caracteres ANSI y nacionales se asignan directamente al equivalente del proveedor nativo.
MySQL
MySQL no define una sintaxis independiente para los literales de cadena de caracteres ANSI y nacionales. En MySQL, se supone 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 latin1 predeterminada), se supone que todas las cadenas son ANSI.
Nota
App Builder establece de forma predeterminada las conexiones MySQL en el conjunto de caracteres UTF-8. Utilice el parámetro CharSet para cambiar el conjunto de caracteres de la conexión MySQL. Por ejemplo, para utilizar el conjunto de caracteres ASCII predeterminado de MySQL, agregue CharSet=latin1 a la configuración avanzada.
MySQL admite introductores de conjuntos de caracteres. El "introductor" es un prefijo que se agrega al comienzo del valor literal de la cadena. El prefijo indica el conjunto de caracteres de la cadena. App Builder utiliza introductores de conjuntos de caracteres para garantizar que los datos Unicode se puedan codificar en literales de cadena, independientemente de la configuración de la conexión. Por el contrario, si la conexión utiliza el conjunto de caracteres UTF-8, el introductor de conjuntos de caracteres garantiza que los datos ASCII se pasen al servidor como ASCII, lo que evita conversiones problemáticas.
En la práctica, esto significa que un literal de cadena de caracteres ANSI de mvSQL se traducirá a:
_latin1'Aristotle''s quotes'
Una cadena literal de caracteres mvSQL National se traducirá a la sintaxis de MySQL como:
_utf8'Aristotle''s quotes'
MySQL no define tipos de datos de almacenamiento separados para los tipos de caracteres ANSI y nacionales. En cambio, todos los tipos de cadenas 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 MySQL con un conjunto de caracteres Unicode (utf8) al tipo de cadena de caracteres nacional correspondiente e independiente del 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 de 16 bits sin signo. Es similar en naturaleza al LCID de Windows.
Al igual que con MySQL, App Builder inspecciona el CCSID para asignarlo correctamente desde un tipo de carácter DB2/i (por ejemplo, VARCHAR) a an App Builder, tipo de datos independiente del proveedor (p. ej. NVARCHAR). Los siguientes CCSID se asignará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. En concreto, App Builder establece el CCSID en 1208 (UTF-8).
Por último, DB2/i no tiene por qué tener una sintaxis independiente para las cadenas de caracteres ANSI y nacionales. Por lo tanto, se utiliza la misma sintaxis para ambas.
Fuentes de Datos Que No Son RDBMS
Los literales de cadena nacionales mvSQL no son compatibles con fuentes de datos que no sean 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