Une chaîne est une séquence de caractères, entourée de
guillemets simples (‘'
’) ou
doubles (‘"
’). Exemples:
Si le serveur SQL est en mode ANSI_QUOTES
,
les chaînes littérales ne peuvent être mises qu'entre
guillemets simples. Une chaîne avec des guillemets double sera
interprétée comme un identifiant.
'une chaîne' "une autre chaîne"
Depuis MySQL 4.1.1, les littéraux disposent d'une option de jeu
de caractères et de collation avec la clause
COLLATE
:
[_charset_name]'string' [COLLATE collation_name]
Exemples :
SELECT _latin1'string'; SELECT _latin1'string' COLLATE latin1_danish_ci;
Pour plus d'informations sur ces formes de chaîne de caractères, voyez Section 10.3.7, « Jeu de caractères et collation des chaînes littérales ».
A l'intérieur d'une chaîne, certains séquences de caractères
ont une signification spéciale. Chacune d'elle commence par un
anti-slash (‘\
’), connu comme le
caractère d'échappement. MySQL reconnaît
les séquences suivantes :
Ces séquences sont sensibles à la casse. Par exemple,
‘\b
’ est interprétée comme un
anti-slash, mais ‘\B
’ est
interprété comme la lettre ‘B
’.
Les caractères ‘\%
’ et
‘\_
’ sont utilisés pour
rechercher des chaînes littérales
‘%
’ et
‘_
’ dans un contexte
d'expressions régulières. Sinon, ces caractères sont
interprétés comme des caractères joker. See
Section 12.3.1, « Opérateurs de comparaison pour les chaînes de caractères ». Notez que si vous
utilisez ‘\%
’ ou
‘\_
’ dans d'autres contextes, ces
séquences retourneront ‘\%
’ et
‘\_
’ et non
‘%
’ et
‘_
’.
Il y a plusieurs fa¸ons d'intégrer un guillemet dans une chaîne :
Un ‘'
’ à l'intérieur d'une
chaîne entourée de ‘'
’ peut
être noté ‘''
’.
Un ‘"
’ à l'intérieur d'une
chaîne entourée de ‘"
’ peut
être noté ‘""
’.
Vous pouvez faire précéder le guillemet par caractère
d'échappement (‘\
’).
Un guillemet simple ‘'
’ à
l'intérieur d'une chaîne à guillemets doubles
‘"
’ n'a besoin d'aucun
traitement spécial (ni doublage, ni échappement). De
même, aucun traitement spécial n'est requis pour un
guillemet double ‘"
’ à
l'intérieur d'une chaîne à guillemets simples
‘'
’.
Le SELECT
montré ici explique comment les
guillemets et les échappements fonctionnent :
mysql>SELECT 'bonjour', '"bonjour"', '""bonjour""', 'bon''jour', '\'bonjour';
+---------+-----------+-------------+----------+----------+ | bonjour | "bonjour" | ""bonjour"" | bon'jour | 'bonjour | +---------+-----------+-------------+----------+----------+ mysql>SELECT "bonjour", "'bonjour'", "''bonjour''", "bon""jour", "\"bonjour";
+---------+-----------+-------------+----------+----------+ | bonjour | 'bonjour' | ''bonjour'' | bon"jour | "bonjour | +---------+-----------+-------------+----------+----------+ mysql>SELECT "Voilà\n3\nlignes";
+--------------------+ | Voilà 3 lignes | +--------------------+
Si vous voulez insérer des données binaires dans un champ
chaîne (comme un BLOB
), les caractères
suivants doivent être échappés :
NUL |
ASCII 0. Représentez le avec ‘\0 ’ (un
anti-slash suivi du caractère ASCII
‘0 ’). |
\ |
ASCII 92, anti-slash. A représenter avec
‘\\ ’. |
' |
ASCII 39, guillemet simple. A représenter avec
‘\' ’. |
" |
ASCII 34, guillemet double. A représenter avec
‘\" ’. |
Lorsque vous écrivez des applications, toutes les chaînes qui risquent de contenir ces caractères spéciaux doivent être protégés avant d'être intégrée dans la commande SQL. Vous pouvez faire cela de deux manières différentes :
passez la chaîne à une fonction qui protège les
caractères spéciaux. Par exemple, en langage C, vous
pouvez utiliser la fonction
mysql_real_escape_string()
. See
Section 24.2.3.47, « mysql_real_escape_string()
». L'interface
Perl DBI
fournit une méthode basée sur
les guillemets
pour convertir les
caractères spéciaux en leur séquence correspondante. See
Section 24.4, « API Perl pour MySQL ».
Au lieu de protéger explicitement tous les caractères, de nombreuses interfaces MySQL fournissent un système de variables qui vous permettent de mettre des marqueurs dans la requête, et de lier les variables à leur valeur au moment de leur exécution. Dans ce cas, l'interface se charge de protéger les caractères spéciaux pour vous.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.