Pour être capable de supporter facilement les tables non-transactionnelles, tous les champs de MySQL ont des valeurs par défaut.
Si vous insérez une valeur ``invalide'' dans une colonne,
comme NULL
dans une colonne NOT
NULL
, ou une valeur numérique trop grand dans une
colonne numérique, MySQL inscrit dans la colonne la
``meilleure valeur possible'', sans produire d'erreur :
Si vous stockez un chiffre hors de l'intervalle de validité d'une colonne numérique, MySQL stocke à la place zéro, la plus petite valeur possible, ou bien la plus grande valeur possible.
Pour les chaînes, MySQL stocke la chaîne vide ou bien la plus grande chaîne qui peut être stockée dans cette colonne.
Si vous essayez de stocker une chaîne qui ne commence pas par un chiffre dans une colonne numérique, MySQL stocke 0.
Si vous essayez de stocker NULL
dans
une colonne qui n'accepte pas la valeur
NULL
, MySQL stocke 0 ou
''
(la chaîne vide). Ce dernier
comportement peut, pour des insertions de ligne unique,
être modifié par l'option de compilation
-DDONT_USE_DEFAULT_FIELDS
. See
Section 2.4.2, « Options habituelles de configure
». Cela fait que les
commandes INSERT
génèreront une
erreur à moins que vous ne spécifiez explicitement les
valeurs pour toutes les colonnes qui requièrent une
valeur non-NULL
.
MySQL vous permet de stocker des dates incorrectes dans
les colonnes de type DATE
et
DATETIME
(comme
'2000-02-31'
ou
'2000-02-00'
). L'idée est que ce n'est
pas le travail du serveur SQL de valider les dates. Si
MySQL peut stocker une valeur et relire exactement la
même valeur, MySQL la stockera. Si la date est totalement
erronée (hors de l'intervalle de validité), la valeur
spéciale '0000-00-00'
est stockée
dans la colonne.
La raison de cette règle ci-dessus est que nous ne pouvons pas vérifier ces conditions avant que la requête ne soit exécutée. Si nous rencontrons un problème après la modification de quelques lignes, nous ne pourront pas annuler la modification, car la table ne le supporte peut-être pas. L'alternative qui consiste à s'arrêter c'est pas envisageable non plus, car nous aurions alors fait la moitié du travail, ce qui sera alors le pire scénario. Dans ce cas, il vaut mieux faire "du mieux possible", et continuer comme si rien n'était arrivé. En MySQL 5.0, nous envisageons d'améliorer cela en fournissant des alertes de conversions automatique, ainsi qu'une option pour vous permettre d'annuler la commande si elle n'utilise que des tables transactionnelles.
Ceci signifie qu'il ne faut pas compter sur MySQL pour vérifier le contenu des champs, mais de gérer cela au niveau de l'application.
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.