| 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.
 Depuis MySQL 4.1.1, les littéraux disposent d'une option de jeu de caractères
et de collation avec la clause  
COLLATE
  :| 
'une chaîne'"une autre chaîne"
 | 
   Exemples :| 
[_charset_name]'string' [COLLATE collation_name]
 | 
 Pour plus d'informations sur ces formes de chaîne de caractères, voyez
 Character String Literal Character Set and Collation .| 
SELECT _latin1'string';SELECT _latin1'string' COLLATE latin1_danish_ci;
 | 
 
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'
 .
| \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. |  
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 :
 
Le  
SELECT
  montré ici explique comment les guillemets et les échappements fonctionnent :
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  
'''
 .
 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 :| 
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 |
 +--------------------+
 | 
 
| 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. |