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.2.3.48, “mysql_real_escape_string()
”. La
interfaz DBI de Perl proporciona un método
quote
para convertir caracteres
especiales a las secuencias de escape equivalentes. Consulte
Sección 24.4, “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.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.