Avec les mathématiques de précisions, les valeurs exactes sont
      utilisées aussi souvent que possible. Par exemple, les
      comparaisons entre noms sont faîtes exactement, sans perte de
      valeur. En mode SQL strict, lors d'une commande
      INSERT dans une colonne avec un type exact, tel
      que DECIMAL ou entier, un nombre est inséré
      avec sa valeur exacte s'il est contenu dans l'intervale de
      validité de la colonne. Lorsqu'il est lu, sa valeur est la même
      que lors de l'insertion. Hors du mode strict, les arrondissements
      sur INSERT sont autorisés.
    
La gestion des expressions numériques dépends du type de valeurs qui sont manipulées :
Si une valeur approximative est impliquée, l'expression sera approximative, et sera évaluée avec l'arithmétique des nombres à virgule flottante.
          Si aucune valeur approximative n'est impliquée, l'expression
          ne contient que des valeurs exactes. Si aucune valeur ne
          contient de partie décimale, l'expression sera évaluée avec
          avec l'arithmétique exacte DECIMAL et la
          précision sera de 64 chiffres. "Exact" est soumis aux
          limitations des représentations binaires.
          1.0/3.0 peut être représenté par
          .333... avec un nombre infini de chiffre,
          mais jamais "exactement" comme un tiers, et
          (1.0/3.0)*3.0 ne vaudra jamais exactement
          "1.0."
        
          Sinon, l'expression ne contient que des entiers. L'expression
          est exacte, et est évaluée avec l'arithmétique entière, et
          la précision est celle d'un BIGINT (64
          bits).
        
Si une expression numérique contient des chaînes de caractères, elles sont converties en valeur décimale de précision double, et l'expression sera une approximation.
      Les insertions dans les colonnes numériques sont affectées par
      le mode SQL, qui est contrôlé par la variable système sql_mode.
      Voyez see Section 1.5.2, « Sélectionner les modes SQL ». La présentation suivante
      mentionne le mode strict, sélectionné par les valeurs
      STRICT_ALL_TABLES ou
      STRICT_TRANS_TABLES mode values et
      ERROR_FOR_DIVISION_BY_ZERO. Pour désactiver
      ces contraintes, vous pouvez utiliser simplement le mode
      TRADITIONAL, qui inclut le mode strict et
      ERROR_FOR_DIVISION_BY_ZERO :
    
mysql> SET sql_mode='TRADITIONAL';
      Si un nombre est inséré dans une colonne de type exact
      (DECIMAL ou entier), il sera inséré comme
      valeur exacte s'il est dans l'intervale de validité de la
      colonne.
    
Si la valeur a trop de chiffres décimaux, un arrondissement surviend et une alerte est générée. L'arrondissement se fait tel que décrit par le "Comportement d'arrondissement".
Si la valeur a trop de chiffres dans la partie entière, la valeur est alors trop grande, et elle est traitée comme ceci :
Si le mode strict n'est pas activé, la valeur est coupée à la première valeur valide, et une alerte est générée.
Si le mode strict est activé, une erreur de dépassement de capacité survient.
Les valeurs trop petites pour être stockées ne sont pas détectées, et aucune erreur ne survient dans ce cas : le comportement est indéfini.
      Par défaut, la division par zéro produit le résultat de
      NULL et aucune alerte. Avec le mode SQL
      ERROR_FOR_DIVISION_BY_ZERO, MySQL gère les
      divisions par zéro différemment :
    
Si le mode strict n'est pas activé, une alerte survient.
Si le mode strict est activé, les insertions et modifications qui manipulent des divisions par zéro sont interdites et une erreur survient.
      En d'autres mots, les insertions et modifications qui impliquent
      des divisions par zéro peuvent être traitées comme des erreurs,
      mais cela requiert le mode SQL
      ERROR_FOR_DIVISION_BY_ZERO en plus du mode
      strict.
    
Supposez que nous ayons la commande suivante :
INSERT INTO t SET i = 1/0;
      Voici ce qui arrive dans différentes combinaisons du mode strict
      et de ERROR_FOR_DIVISION_BY_ZERO :
    
sql_mode Value | 
Result | 
'' | 
Aucune alerte, aucune erreur, i prend la valeur de
              NULL
 | 
| strict | Aucune alerte, aucune erreur, i vaut NULL
 | 
ERROR_FOR_DIVISION_BY_ZERO | 
Alerte, pas d'erreur, i vaut NULL
 | 
strict,ERROR_FOR_DIVISION_BY_ZERO
 | 
Erreur, pas d'insertion. | 
Pour les inserionts de lignes dans une colonne numérique, la conversion de chaîne en valeur numérique est géré comme ceci :
Une chaîne qui ne commence pas par un nombre, ne peut pas être utilisée comme nombre et produit une erreur en mode strict, ou une alerte sinon. Cela vaut aussi pour les chaînes vides.
Une chaîne qui commence avec un nombre peut être convertie, mais la partie non numérique sera tronquée. Cela produit une erreur en mode strict et une alerte sinon.
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.
