2010-12-03 5 views
0

Je suis complètement nouveau pour les bases de données et SQL. J'ai une colonne portant le numéro NOT NULL.
Lorsque j'oublie de donner une valeur à cette colonne lors d'un INSERT, elle insère une valeur 0 dans cette colonne.
Y at-il quelque chose que je peux faire pour lui faire retourner une erreur au lieu de changer le NULL à 0?Pourquoi MySQL change-t-il la valeur null à zéro?

+1

Avez-vous une valeur par défaut dans cette colonne? –

+0

Est-ce une colonne entière? Ne passez-vous pas une valeur du tout, ou vous * croyez * que la valeur est vide? –

+0

@Martin, Il n'y a pas de défaut –

Répondre

4

Vous voulez jeter un oeil à la configuration SQL_MODE. Cela vous permet de définir à quel point MySQL traite de telles choses. Par défaut, il est assez clément ce qui n'est pas ce que je veux habituellement. Cela dépend aussi du type de données, en particulier avec les dates, il est moins qu'optimal par défaut. Je vis personnellement STRICT_ALL_TABLES habituellement.

Voir le manuel MySQL (5.0) ici:

http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html

+0

J'ai fait "SET sql_mode = 'STRICT_ALL_TABLES';" et maintenant il renvoie un message d'erreur chaque fois que j'oublie une colonne NOT NULL. Merci beaucoup. –

0

Je suppose que vous avez une valeur par défaut pour cette colonne

1

Il y a deux raisons possibles pour cela:

  • Vous avez une valeur par défaut définie pour cette colonne
  • Votre colonne est INT NOT NULL et passe de NULL à INT, ce qui donne 0

La deuxième situation semble être le cas ici, évidemment. Si vous voulez obtenir une erreur à la place, vous pouvez changer le SQL_MODE pour être strict. Une autre possibilité est de faire la validation d'entrée dans votre programme plutôt que de le laisser à SQL.

Questions connexes