:: DEVELOPER ZONE
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 11.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 13.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 21.2.3.44, « 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 21.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.
© 1995-2005 MySQL AB. All rights reserved.
