在percona-5.6和MariaDB-10.0服务器上,表上声明的NULL字段被忽略。在插入数据时,我可以将声明为NULL的字段保留为空,并且服务器不会抛出错误或停止插入。当我在MySQL5.6和MariaDB-5.5上尝试时,它运行得很好,不允许yo在声明为NULL的字段中插入空值。
请告诉我为什么在mariaDB-10.0上是这样的。谢谢
发布于 2016-07-20 03:24:36
这摘自MySQL文档:
MySQL 5.7.1的变化(2013-04-23,里程碑11) ...如果列声明为NULL,则不允许将NULL插入该列或将其更新为NULL。但是,即使存在将列设置为非空值的“前插入”(或“更新触发器”之前),也会强制执行此约束。现在,根据SQL标准,在语句末尾检查约束。(Bug #6295,Bug#11744964)..。
基本上,要更改此行为,可以执行以下操作:
MariaDB> SET SESSION sql_mode := 'NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
MariaDB> SELECT @@GLOBAL.sql_mode 'sql_mode::GLOBAL',
@@SESSION.sql_mode 'sql_mode::SESSION';
+------------------------+-----------------------------------------------------------------------------------------------------------------+
| sql_mode::GLOBAL | sql_mode::SESSION |
+------------------------+-----------------------------------------------------------------------------------------------------------------+
| NO_ENGINE_SUBSTITUTION | NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+------------------------+-----------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
MariaDB> SHOW CREATE TABLE `table_name`;
+------------+----------------------------------------------------------------------------+
| Table | Create Table |
+------------+----------------------------------------------------------------------------+
| table_name | CREATE TABLE `table_name` ( |
| | `id` INT(11) UNSIGNED NOT NULL, |
| | `field` VARCHAR(20) DEFAULT NULL, |
| | `field_with_default_value` VARCHAR(20) NOT NULL DEFAULT 'myDefault' |
| | ) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+------------+----------------------------------------------------------------------------+
1 row in set (0.00 sec)
MariaDB> INSERT INTO `table_name`(`id`, `field`, `field_with_default_value`)
VALUES
(1, 'Value', NULL);
ERROR 1048 (23000): Column 'field_with_default_value' cannot be null我希望这是道路上的一盏灯。
https://dba.stackexchange.com/questions/89121
复制相似问题