The Georgia Asked: 2015-01-13 18:03:10 +0800 CST2015-01-13 18:03:10 +0800 CST 2015-01-13 18:03:10 +0800 CST Percona 和 MariaDB-10.0 忽略表字段上的非空值 772 在 percona-5.6 和 MariaDB-10.0 服务器上,表字段上声明的 NOT NULL 被忽略。插入数据时,我可以将声明为 NOT NULL 的字段留空,并且服务器不会抛出错误或停止继续插入。当我在 MySQL-5.6 和 MariaDB-5.5 上尝试它时,它按预期工作正常并且不允许你在声明为 NOT NULL 的字段上插入空值。 请告知为什么在 mariaDB-10.0 上会出现这种情况。谢谢 schema insert 1 个回答 Voted Best Answer Ale 2016-07-20T19:24:36+08:002016-07-20T19:24:36+08:00 这取自 MySQL 文档: MySQL 5.7.1 的变化(2013-04-23,里程碑 11) ... 如果列声明为 NOT NULL,则不允许将 NULL 插入该列或将其更新为 NULL。但是,即使存在将列设置为非 NULL 值的 BEFORE INSERT(或 BEFORE UPDATE 触发器),也会强制执行此约束。现在,根据 SQL 标准,在语句末尾检查约束。(错误#6295,错误#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 我希望这是路上的一盏灯。
这取自 MySQL 文档:
基本上改变这种行为可以做到以下几点:
我希望这是路上的一盏灯。