Structure du langage
<<<
Chaînes Nombres
>>>

10.1 Littéraux : comment écrire les chaînes et les nombres
10 Structure du langage
 Manuel de Référence MySQL 4.1 : Version Française

->Chaînes
Nombres
Valeurs hexadécimales
Valeurs booléennes
Valeurs NULL

10.1.1 Chaînes

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 Character String Literal Character Set and Collation .

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 :

\0 Un 0 ASCII ( NUL ).
\' Un guillemet simple ( ''' ).
\" Un guillemet double ( '"' ).
\b Un effacement.
\n Une nouvelle ligne.
\r Un retour chariot.
\t Une tabulation.
\z ASCII(26) (Contrôle-Z). Ce caractère peut être encodé pour vous éviter des problèmes avec Windows, vu qu'il équivaut à une fin de fichier sur cet OS. (ASCII(26) vous posera des problèmes si vous utilisez mysql base < fichier .)
\\ Un anti-slash ( '\' ).
\% Un signe pourcentage littéral : '%' . Voir les notes ci-dessous.
\_ Un signe souligné littéral : '_' . Voir les notes ci-dessous.
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. Fonctions de comparaison de 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() . 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. Interface Perl .
  • 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.

<< Chaînes >>
Structure du langage Littéraux : comment écrire les chaînes et les nombres Nombres