Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL INSERT sans avoir à spécifier chaque champ non par défaut (#1067 - Valeur par défaut non valide pour 'table')

L'un de vos serveurs s'exécute en mode strict par défaut et l'autre non. Si un serveur s'exécute en mode strict (ou si vous le définissez dans votre connexion) et que vous essayez d'insérer une valeur NULL dans une colonne définie comme NOT NULL, vous obtiendrez Erreur #1364. Sans mode strict, votre valeur NULL sera remplacée par une chaîne vide ou 0.

Exemple :

CREATE TABLE `test_tbl` (
 `id` int(11) NOT NULL,
 `someint` int(11) NOT NULL,
 `sometext` varchar(255) NOT NULL,
 `somedate` datetime NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

SET sql_mode = '';
INSERT INTO test_tbl(id) VALUES(1);
SELECT * FROM test_tbl;
+----+---------+----------+---------------------+
| id | someint | sometext | somedate            |
+----+---------+----------+---------------------+
|  1 |       0 |          | 0000-00-00 00:00:00 |
+----+---------+----------+---------------------+
SET sql_mode = 'STRICT_ALL_TABLES';
INSERT INTO test_tbl(id) VALUES(2);
#1364 - Field 'someint' doesn't have a default value