sql >> Databasteknik >  >> RDS >> Mysql

MySQL INSERT utan att behöva ange alla icke-standardfält (#1067 - Ogiltigt standardvärde för 'tabell')

En av dina servrar körs i strikt läge som standard och den andra inte. Om en server körs i strikt läge (eller du ställer in den i din anslutning) och du försöker infoga ett NULL-värde i en kolumn som definieras som NOT NULL får du #1364 fel. Utan strikt läge kommer ditt NULL-värde att ersättas med tom sträng eller 0.

Exempel:

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 


  1. Hur BIT_LENGTH() fungerar i MariaDB

  2. SQL Server - Inkludera NULL med UNPIVOT

  3. Använda DBCC CLONEDATABASE för att generera ett schema och enbart statistikkopia av en användardatabas i SQL Server 2014 SP2

  4. MySQL-gruppera efter intervall inom ett datumintervall