Tabla de contenidos
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
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 NULL
.
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.
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
ANSI_QUOTES
, 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
:
[_conjunto_caracteres
]'cadena
' [COLLATEtipo_ordenación
]
Ejemplos:
SELECT _latin1'cadena
'; SELECT _latin1'cadena
' 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:
Estas secuencias son sensibles a mayúsculas. Por ejemplo,
'\b
' se interpreta como carácter de
retroceso, pero '\B
' se interpreta como
'B
'.
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 SELECT
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 BLOB
), los siguientes
caracteres deberán representarse con secuencias de escape:
NUL
|
Byte NUL (ASCII 0). Este carácter se representará
con '\0 ' (una barra invertida seguida
de un carácter ASCII '0 '). |
\
|
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
mysql_real_escape_string()
. Consulte Sección 24.3.3.48, “mysql_real_escape_string()
”. La interfaz DBI de Perl proporciona un métodoquote
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.
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.
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 CAST(... AS
UNSIGNED)
:
mysql> SELECT 0x41, CAST(0x41 AS UNSIGNED); -> 'A', 65
La sintaxis 0x
se basa en ODBC. Las cadenas
hexadecimales son utilizadas a menudo por ODBC para proveer
valores para columnas BLOB
. La sintaxis
x'hexstring'
se basa en SQL standard.
Se puede convertir una cadena o un número en una cadena en
formato hexadecimal con la función HEX()
:
mysql> SELECT HEX('cat'); -> '636174' mysql> SELECT 0x636174; -> 'cat'
En MySQL 5.0, la constante TRUE
se evalúa
como 1
y la constante
FALSE
, como 0
. 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
A partir de MySQL 5.0.3, los valores de bits pueden escribirse
utilizando la notación
b'
valor
'.
value
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 BIT
:
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 | +------+----------+----------+----------+
El valor NULL
significa “no hay
dato.” NULL
puede escribirse en
cualquier combinación de mayúsculas y minúsculas.
Debe tenerse en cuenta que el valor NULL
no
es lo mismo que 0
para tipos numéricos o la
cadena vacía para tipos de cadena. Consulte
Sección A.5.3, “Problemas con valores NULL
”.
Para operaciones de exportación o importación de texto
utilizando LOAD DATA INFILE
o SELECT
... INTO OUTFILE
, NULL
se
representa con la secuencia \N
. Consulte
Sección 13.2.5, “Sintaxis de LOAD DATA INFILE
”.