sql >> Base de Datos >  >> RDS >> Mysql

MySQL INSERT sin tener que especificar cada campo no predeterminado (#1067 - Valor predeterminado no válido para 'tabla')

Uno de sus servidores se ejecuta en modo estricto de forma predeterminada y el otro no. Si un servidor se ejecuta en modo estricto (o lo configura en su conexión) e intenta insertar un valor NULL en una columna definida como NOT NULL obtendrá Error #1364. Sin el modo estricto, su valor NULL se reemplazará con una cadena vacía o 0.

Ejemplo:

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