7.1 Syntaxe des chaînes et nombres

7.1.1 Chaînes

Une chaîne est une séquence de caractères, entourée par des guillemets simples (`''') ou doubles(`""'). Par exemple :

'une chaîne'
"une autre chaîne"

A l'intérieur d'une chaîne, on trouve des séquences spéciales. Celles-ci commencent avec le caractère backslash (``\''), dit aussi caractère d'échappement. MySQL reconnaît les séquences suivantes :

Within a string, certain sequences have special meaning. Each of these sequences begins with a backslash known as the escape character. MySQL recognizes the following escape sequences:

  • \0 ASCII 0 (NUL) le caractère nul.
  • \n Une nouvelle ligne.
  • \t Une tabulation.
  • \r Un retour chariot.
  • \b Un effacement.
  • \' Un guillemet simple (``''').
  • \" Un guillemet double (``"'').
  • \\ Un backslash (``\'').
  • \% Un pourcentage ``%''. Cela permet de rechercher le caractère `%' dans un contexte ou il pourrait etre considéré comme un caractère spécial.
  • \_ Un souligné ``_'' Cela permet de rechercher le caractère ``_'dans un contexte ou il pourrait etre considéré comme un caractère spécial.'

    Il y a plusieurs façons d'introduire des guillemets dans une chaîne.

    • Un guillemet simple ``''' dans une chaîne à guillemet simple peut s'écrire : ``''''.
    • Un guillemet double ``"''dans une chaîne à double simple peut s'écrire : ``""''.
    • On peut ajouter le caractère d'échappement avant un guillemet : ``\''.
    • Un guillemet simple ``''' dans une chaîne à guillemet double ne requiert aucun traitement spécial.
    • Un guillemet double ``"'' dans une chaîne à guillemet simple ne requiert aucun traitement spécial.

    La commande SELECT ci-dessous montre comment fonctionne les guillemets et le caractère d'échappement.

    mysql> SELECT 'bonjour', '"bonjour"', '""bonjour""', 'bonj''our', '\'bonjour';

    +---------+-----------+-------------+----------+----------+
    | bonjour | "bonjour" | ""bonjour"" | bonj'our | 'bonjour |
    +---------+-----------+-------------+----------+----------+
    mysql> SELECT "bonjour", "'bonjour'", "''bonjour''", "bonj""our", "\"bonjour";
    +---------+-----------+-------------+----------+----------+
    | bonjour | 'bonjour' | ''bonjour'' | bonj"our | "bonjour |
    +---------+-----------+-------------+----------+----------+
    
    mysql> SELECT "Voici\nQuatre\nLignes\nDistinctes";
    +--------------------+
    | Voici
    Quatre
    Lignes
    Distinctes |
    +--------------------+
    

    Pour ajouter des valeurs binaires dans un BLOB, les caractères suivants doivent être représenté par des séquences spéciales :

  • NUL ASCII 0. Représentation : ``\0'' (un backslash et un caractère ASCII ``0'' ).
  • \ ASCII 92, backslash. Représentation : ``\\''.
  • ' ASCII 39, guillemet simple. Représentation : ``\'''.
  • " ASCII 34, guillemet double. Représentation : ``\"''.
  • De préférence, on utilisera une séquence d'échappement pour toute chaîne qui contient un des caractères spéciaux ci-dessus.

    7.1.2 Nombres

  • Les entiers sont représentés comme une séquence de chiffres. Les nombres réel utilise le point (``.') comme séparateur décimal. Les entiers et les réels peuvent être précédés par le signe moins (`-'), pour indiquer un nombre négatif.'
  • Exemples d'entiers :
    1221
    0
    -32
    
  • Exemples de nombres réels :
    294.42
    -32032.6809e+10
    148.00
    
  • Lorsqu'un nombre entier est utilisé avec un nombre réel, il est considéré lui aussi, comme un nombre réel.

    7.1.3 Valeurs héxadecimales

    MySQL supporte les valeurs hexadécimales. Dans un contexte numérique, elles se comportent comme des entiers (précision 64bits). Dans un contexte de chaînes, elles se comportent comme des chaînes binaires dont chaque paire de digits seront converti en caractère.

    mysql> SELECT 0xa+0
           -> 10
    mysql> select 0x5061756c;
           -> Paul
    

    Les chaînes hexadécimales sont souvent utilisées avec ODBC pour donner des valeurs aux colonnes BLOB.

    7.1.4 La valeur NULL

  • La valeur NULL signifie : ``aucune information''. Cette valeur est différente de 0 ou de la chaîne vide.
  • NULL est parfois représenté par \N quand on utilise un fichier d'import ou d'export (LOAD DATA INFILE, SELECT ... INTO OUTFILE). Cf section LOAD DATA.

    7.1.5 Noms de base de données, table, index, column et alias

  • Les noms portés par les base de données, les tables, les index, les colonnes et les alias suivent tous les mêmes règle dans MySQL:
    • Un nom est constitué de caractères alphanumériques et des caractères ``_'' et ``$''.
    • Le nom d'une base de données, d'une table, d'un index ou d'une colonne peut avoir jusqu'à 64 caractères.
    • Un nom peut commencer avec n'importe quel caractère autorisé. En particulier, un nom peut commencer avec un nombre (ce qui n'est pas toujours le cas dans de nombreuses bases de données). Cependant, un nom ne peut pas contenir uniquement des nombres.
    • Il est préférable de ne pas utiliser de noms tels que 1e, car un expression telle que 1e est ambiguë. Le nom peut être interprété comme une expression (1e + 1) ou comme le nombre 1e+1.
    • Il est interdit d'utiliser le point dans les noms, car il est déjà utilisé pour spécifier les noms des colonnes (cf ci dessous).
    Avec MySQL, il est possible d'accéder aux colonnes d'une table avec les expressions suivantes : Il n'est pas nécessaire de préciser Nom_tab ou Nom_base. Nom_tab pour faire référence à un nom de colonne, à moins que cela puisse être ambiguë. Par exemple, si les tables t1 et t2 contiennent chacune la colonne c, et que lors d'un SELECT, les deux tables soient utilisées. Dans ce cas, c est ambiguë, car elle n'est pas unique dans les tables utilisées, et il faut alors préciser la colonne en précisant t1.c et t2.c. De la même manière, si deux bases de données contiennent chacune une table nommée t, il faudra préciser la base de données utilisée, en notant : db1.t.col1 et db2.t.col2. Dans la syntaxe .Nom_tab. Nom_col, on suppose que la table Nom_tab est disponible dans la base de données courante. Cette syntaxe est autorisée pour assurer la compatibilité avec ODBC, car certains programmes compatible ODBC ajoute le préfixe point ``.'' aux noms des tables.

    7.1.5.1 Sensibilité des noms à la casse

  • Dans MySQL, les base de données et les tables correspondent à des dossiers et fichiers. Par conséquent, la sensibilité à la casse du système d'exploitation sous-jacent détermine celle de MySQL. Par exemple, les noms de base de données et de tables seront sensible à la casse sous Unix, et pas sous Windows.
  • N.B.: Bien que les noms de base de données et de table soient insensible à la casse, sous Windows 32bits, il est préférable de toujours utiliser la même casse pour se référer à un objet dans une même requête. La requête suivante ne fonctionnera pas, car on utilise la même table avec deux noms différents : ma_table et MA_TABLE.
    
    SELECT * FROM ma_table WHERE MA_TABLE.col=1;
    
  • Dans tous les cas, les noms de colonnes sont insensibles à la casse.
  • Les noms d'alias sont sensibles à la casse. La requête suivante ne fonctionnera pas, car elle utilise le même alias, sous la forme : a et A.
    
    mysql> SELECT Nom_col FROM Nom_table AS a
              WHERE a.Nom_col = 1 OR A. Nom_col = 2;
    
  • Les alias sur une colonnes sont insensibles à la casse.