Capítulo 9. Estructura de lenguaje

MySQL 5.0

Capítulo 9. Estructura de lenguaje

Este capítulo trata sobre las reglas a seguir cuando se escriban los siguientes elementos de sentencias SQL durante el uso de MySQL:

  • Valores literales, como cadenas y números.

  • Identificadores, como nombres de tablas y columans.

  • Variables de usuario y de sistema

  • Comentarios

  • Palabras reservadas

9.1. Valores literales

En esta sección se trata la escritura de valores literales en MySQL. Estos incluyen a las cadenas, números, valores hexadeciales, valores booleanos y . También se ocupa de las distintas situaciones (algunas muy propensas a error) en las que se puede incurrir al manejar estos tipos básicos de MySQL.

9.1.1. Cadenas de caracteres

Una cadena (string) es una secuencia de caracteres, encerrada por comillas simples ('') o dobles (''). Ejemplos:

'una cadena'
"otra cadena"

Si el modo de servidor tiene habilitado , las cadenas solamente pueden delimitarse con comillas simples. Una cadena delimitada por comillas dobles será interpretada como un identificador.

A partir de MySQL 4.1.1, las cadenas pueden tener una parte indicativa del conjunto de caracteres y una cláusula :

[_]'' [COLLATE ]

Ejemplos:

SELECT _latin1'';
SELECT _latin1'' COLLATE latin1_danish_ci;

Para más información sobre esta sintaxis consulte Sección 10.3.7, “Conjunto de caracteres y colación de columnas “carácter””.

Dentro de una cadena, ciertas secuencias de caracteres tienen un significado especial. Cada una de estas secuencias comienza con una barra diagonal invertida (''), conocida como caracter de escape. MySQL reconoce las siguientes secuencias de escape:

Un caracter ASCII 0 ().
Un caracter de comilla simple ('').
Un carácter de comilla doble ('').
Un carácter de retroceso.
Un carácter de salto de línea.
Un carácter de retorno de carro.
Un carácter de tabulación.
ASCII 26 (Control-Z). Este carácter puede codificarse como '' para solventar el problema de que el ASCII 26 se interpreta en Windows como fin de fichero. (El ASCII 26 causará problemas si se intenta emplear < .)
Un carácter de barra invertida ('').
Un carácter ''. Consulte la nota a continuación.
Un carácter ''. Consulte la nota a continuación.

Estas secuencias son sensibles a mayúsculas. Por ejemplo, '' se interpreta como carácter de retroceso, pero '' se interpreta como ''.

Las secuencias '' y '' se emplean para buscar apariciones literales de '' y '' en un contexto de búsqueda por patrones, donde en otro caso se debieran interpretar como caracteres comodines. Consulte Sección 12.3.1, “Funciones de comparación de cadenas de caracteres”. Hay que advertir que si se emplean '' o '' en otra situación, devolverán las cadenas '' y '' y no '' y ''.

En toda otra secuencia de escape, la barra invertida se ignora. Esto es, el carácter al que se aplica se interpreta como si no tuviera delante un carácter de escape.

Hay varias formas de incluir comillas dentro de una cadena:

  • Un '' dentro de una cadena que está delimitada por '' debe escribirse como ''.

  • Un '' dentro de una cadena que está delimitada por '' debe escribirse como ''.

  • Se puede preceder el carácter de comillas con un carácter de escape. ('').

  • Un '' dentro de una cadena delimitada con '' no necesita ningún tratamiento especial, ni colocarla en forma doble ni precederla con un carácter de escape. Lo mismo se cumple para una '' colocada en una cadena delimitada con ''.

Las siguientes sentencias demuestran cómo actúan las comillas y los caracteres de escape:

mysql> SELECT 'hola', '"hola"', '""hola""', 'hol''a', '\'hola';
+------+--------+----------+-------+-------+
| hola | "hola" | ""hola"" | hol'a | 'hola |
+------+--------+----------+-------+-------+

mysql> SELECT "hola", "'hola'", "''hola''", "hol""a", "\"hola";
+------+--------+----------+-------+-------+
| hola | 'hola' | ''hola'' | hol"a | "hola |
+------+--------+----------+-------+-------+

mysql> SELECT 'Estas\nSon\nCuatro\nLíneas';
+--------------------+
| Estas
Son
Cuatro
Líneas |
+--------------------+

mysql> SELECT 'barra\ desaparece';
+------------------+
| barra desaparece |
+------------------+

Si se pretende insertar datos binarios en una columna de tipo cadena (por ejemplo un ), los siguientes caracteres deberán representarse con secuencias de escape:

Byte (ASCII 0). Este carácter se representará con '' (una barra invertida seguida de un carácter ASCII '').
Barra invertida (ASCII 92). Este carácter se representará con ''.
Comilla simple (ASCII 39). Este carácter se representará con ''.
Comilla doble (ASCII 34). Este carácter se representará con ''.

Al escribir programas de aplicación, cualquier cadena que pudiese contener cualquiera de estos caracteres especiales deberá ser preparada antes de utilizarse como valor en una sentencia SQL que se enviará al servidor MySQL. Esto puede hacerse de dos maneras:

  • Procesando la cadena con una función que reemplace los caracteres especiales con una secuencia de escape. Por ejemplo, en un programa C, se puede emplear la función de la API de C . Consulte Sección 24.3.3.48, “. La interfaz DBI de Perl proporciona un método para convertir caracteres especiales a las secuencias de escape equivalentes. Consulte Sección 24.5, “La API Perl de MySQL”.

  • Como alternativa al reemplazo explícito de caracteres especiales, varias APIs de MySQL proporcionan la parametrización de consultas, lo que permite insertar marcadores especiales en una consulta y luego asociarles valores al momento de emitirla. En este caso, la API toma a su cargo el reemplazo de caracteres especiales en los valores.

9.1.2. Números

Los enteros se representan como secuencias de dígitos. Los flotantes utilizan '' como separador decimal. Cada tipo de número puede estar precedido con '' para indicar un valor negativo.

Ejemplos de enteros válidos:

1221
0
-32

Ejemplos de números de punto flotante válidos:

294.42
-32032.6809e+10
148.00

Un entero puede usarse en un contexto de punto flotante; se intepretará como el número de punto flotante equivalente.

9.1.3. Valores hexadecimales

MySQL soporta valores hexadecimales. En contextos numéricos, éstos actuarán como enteros (con precisión de 64 bits). En contextos de cadena, actuarán como cadenas binarias, donde cada par de dígitos hexadecimales es convertido a un carácter:

mysql> SELECT x'4D7953514C';
        -> 'MySQL'
mysql> SELECT 0xa+0;
        -> 10
mysql> SELECT 0x5061756c;
        -> 'Paul'

En MySQL 5.0, el tipo predeterminado para un valor hexadecimal es una cadena. Si se desea estar seguro de que el valor se tratará como un número, puede emplearse :

mysql> SELECT 0x41, CAST(0x41 AS UNSIGNED);
        -> 'A', 65

La sintaxis se basa en ODBC. Las cadenas hexadecimales son utilizadas a menudo por ODBC para proveer valores para columnas . La sintaxis se basa en SQL standard.

Se puede convertir una cadena o un número en una cadena en formato hexadecimal con la función :

mysql> SELECT HEX('cat');
        -> '636174'
mysql> SELECT 0x636174;
        -> 'cat'

9.1.4. Valores booleanos

En MySQL 5.0, la constante se evalúa como y la constante , como . Los nombres de constantes pueden escribirse en cualquier combinación de mayúsculas y minúsculas.

mysql> SELECT TRUE, true, FALSE, false;
        -> 1, 1, 0, 0

9.1.5. Valores de bits

A partir de MySQL 5.0.3, los valores de bits pueden escribirse utilizando la notación '. es un valor binario escrito empleando ceros y unos.

La notación de bits es conveniente para especificar valores que se asignarán a columnas :

mysql> CREATE TABLE t (b BIT(8));
mysql> INSERT INTO t SET b = b'11111111';
mysql> INSERT INTO t SET b = b'1010';
+------+----------+----------+----------+
| b+0  | BIN(b+0) | OCT(b+0) | HEX(b+0) |
+------+----------+----------+----------+
|  255 | 11111111 | 377      | FF       |
|   10 | 1010     | 12       | A        |
+------+----------+----------+----------+

9.1.6. Valores NULL

El valor significa “no hay dato. puede escribirse en cualquier combinación de mayúsculas y minúsculas.

Debe tenerse en cuenta que el valor no es lo mismo que para tipos numéricos o la cadena vacía para tipos de cadena. Consulte Sección A.5.3, “Problemas con valores .

Para operaciones de exportación o importación de texto utilizando o , se representa con la secuencia . Consulte Sección 13.2.5, “Sintaxis de .