Saltar al contenido

Literales de Cadena Mvsql

El estándar SQL define dos tipos de cadenas de caracteres, cada uno con su propia sintaxis literal.

  • ANSI
  • National

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 varios bytes, como Unicode.

El estándar SQL define una sintaxis literal separada para cada tipo de cadena de caracteres. La sintaxis de un literal de cadena ANSI es:

'Aristotle''s quotes'

Tenga en cuenta que las comillas simples incrustadas dentro del literal de cadena se escapan duplicando la comilla simple.

La sintaxis de un literal de cadena nacional es:

N'Aristotle''s quotes'

mvSQL admite la sintaxis estándar de SQL para literales de cadenas de caracteres nacionales y ANSI.

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 juego 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. El uso de la sintaxis literal de cadena de caracteres adecuada evitará errores y eliminará la necesidad de realizar conversiones explícitas.

Disponible en Vinyl 2.1. Mejorado en Vinyl 2.3.

Soporte de Proveedores

A menos que se documente lo contrario, los literales de cadenas de caracteres nacionales y ANSI se asignan directamente al equivalente del proveedor nativo.

MySQL

MySQL no define una sintaxis separada para literales de cadenas de caracteres nacionales y ANSI. En MySQL, se supone que la cadena literal está codificada utilizando el juego 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

Vinyl establece de forma predeterminada las conexiones MySQL en el juego de caracteres UTF-8. Utilice el parámetro CharSet para cambiar el juego de caracteres de la conexión MySQL. Por ejemplo, para utilizar el juego de caracteres ASCII predeterminado de MySQL, agregue CharSet=latin1 a la configuración avanzada.

MySQL admite introductores de juegos de caracteres. El "introductor" es un prefijo agregado al comienzo del valor literal de la cadena. El prefijo indica el juego de caracteres de la cadena. Vinyl utiliza introductores de juegos de caracteres para garantizar que los datos Unicode se puedan codificar en cadenas literales, independientemente de la configuración de conexión. Por el contrario, si la conexión utiliza el juego de caracteres UTF-8, el introductor del juego de caracteres garantiza que los datos ASCII se pasen al servidor como ASCII, evitando conversiones problemáticas.

En la práctica, esto significa que un literal de cadena de caracteres ANSI mvSQL se traducirá a:

_latin1'Aristotle''s quotes'

Un literal de cadena de caracteres nacional mvSQL se traducirá a la sintaxis de MySQL como:

_utf8'Aristotle''s quotes'

MySQL no define tipos de datos de almacenamiento separados para tipos de caracteres ANSI y nacionales. En cambio, todos los tipos de cadenas se almacenan en un tipo de datos común. El juego de caracteres determina cómo se almacenan los datos. Vinyl asigna columnas de caracteres MySQL con un juego de caracteres Unicode (utf8) al tipo de cadena de caracteres nacional neutral del proveedor correspondiente (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 de naturaleza similar al LCID de Windows.

Al igual que con MySQL, Vinyl inspecciona el CCSID para asignar correctamente desde un tipo de carácter DB2/i (por ejemplo, VARCHAR) a un tipo de datos de Vinyl, independiente del proveedor (por ejemplo, NVARCHAR). Los siguientes CCSID se correlacionarán con el 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, Vinyl establece explícitamente el CCSID. Específicamente, Vinyl establece el CCSID en 1208 (UTF-8).

Finalmente, DB2/i no tiene que tener una sintaxis separada para cadenas de caracteres ANSI y nacionales. Por lo tanto, se utiliza la misma sintaxis para ambos.

Fuentes de Datos Que No Son RDBMS

Los literales de cadena mvSQL National no son compatibles con fuentes de datos que no sean RDBMS, como REST y Salesforce, etc.

Otras Lecturas

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