J'avais créé une table il y a quelque temps et commencé à y ajouter des données. Récemment, j'ai ajouté une nouvelle colonne ( address
) avec NOT NULL
dans le cadre de la nouvelle colonne. Les anciennes lignes (pré-ajout) sont toujours nulles, ce qui a créé un avertissement dans le cadre de la définition. Cependant, de nouvelles lignes avec la nouvelle colonne sont toujours autorisées à insérer des valeurs NULL.
La pré-addition de la nouvelle colonne annule-t-elle la source de leur autorisation? Si c'est le cas, existe-t-il un moyen de dire à MySQL de ne pas l'autoriser même si c'était avant?
mysql> show create table my_table\G
*************************** 1. row ***************************
Table: my_table
Create Table: CREATE TABLE `my_table` (
`entry_id` int(11) NOT NULL auto_increment,
`address` varchar(512) NOT NULL,
`follow_up_to` int(11) default NULL,
PRIMARY KEY (`entry_id`),
KEY `follow_up_to` (`follow_up_to`),
CONSTRAINT `my_table_ibfk_1`
FOREIGN KEY (`follow_up_to`)
REFERENCES `my_table` (`entry_id`) ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=535 DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
mysql>
Réponses:
De quelle version de mysql s'agit-il?
Dans quel mode utilisez-vous?
(Cela doit être exécuté dans le contexte de votre application, juste au cas où il la changerait).
MySQL est documenté ainsi: http://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html
Mes propres tests ne parviennent pas à dupliquer votre problème
Le fait que les anciennes données aient des valeurs nulles ne devrait pas avoir d'importance. La table Alter aurait dû «tronquer» les valeurs nulles en chaînes vides
la source