首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Percona和MariaDB-10.0忽略表字段的null

Percona和MariaDB-10.0忽略表字段的null
EN

Database Administration用户
提问于 2015-01-13 02:03:10
回答 1查看 813关注 0票数 1

在percona-5.6和MariaDB-10.0服务器上,表上声明的NULL字段被忽略。在插入数据时,我可以将声明为NULL的字段保留为空,并且服务器不会抛出错误或停止插入。当我在MySQL5.6和MariaDB-5.5上尝试时,它运行得很好,不允许yo在声明为NULL的字段中插入空值。

请告诉我为什么在mariaDB-10.0上是这样的。谢谢

EN

回答 1

Database Administration用户

回答已采纳

发布于 2016-07-20 03:24:36

这摘自MySQL文档:

MySQL 5.7.1的变化(2013-04-23,里程碑11) ...如果列声明为NULL,则不允许将NULL插入该列或将其更新为NULL。但是,即使存在将列设置为非空值的“前插入”(或“更新触发器”之前),也会强制执行此约束。现在,根据SQL标准,在语句末尾检查约束。(Bug #6295,Bug#11744964)..。

基本上,要更改此行为,可以执行以下操作:

代码语言:javascript
复制
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

我希望这是道路上的一盏灯。

票数 4
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/89121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档