首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MySQL兼容模式下,h2不强制执行not NULL

在MySQL兼容模式下,h2不强制执行not NULL
EN

Stack Overflow用户
提问于 2013-11-16 08:41:55
回答 2查看 2.2K关注 0票数 11

在MySQL兼容模式下,以下SQL成功并返回0:

代码语言:javascript
复制
CREATE TABLE test2 (i INTEGER NOT NULL);
INSERT INTO test2 VALUES (NULL);
SELECT * FROM test2;

在默认模式下,它会如预期的那样失败。使用MySQL 5.5 / InnoDB时也会失败。"MySQL兼容性“真的意味着"MyISAM兼容性”吗?

EN

回答 2

Stack Overflow用户

发布于 2016-10-15 02:35:59

这个问题是由于MySQL处理空值和h2的方式造成的。基本上,MySQL将接收到的空值转换为empty string/0,而在h2中,所有三种类型之间都有明显的区别。

因此,他们(h2)决定在MYSQL模式下将空值转换为0/空字符串/当前时间戳。但是由于as per core h2 0/empty字符串不是nulls,所以它插入数据。

使用org.h2.engine.Mode并修改与此相关的变量:

代码语言:javascript
复制
Mode mode = Mode.getInstance("MYSQL");
mode.convertInsertNullToZero = false;

这对我很有效。感谢this链接。

票数 9
EN

Stack Overflow用户

发布于 2013-11-16 08:50:22

来自H2: MySQL Compatibility Mode

插入数据时,如果将列定义为非NULL并且插入了NULL,则使用0(或空字符串,或时间戳列的当前时间戳)值。通常,此操作是不允许的,并且会引发异常。

MySQL手册对INSERT有以下说明,没有区分MyISAM和InnoDB:

将NULL插入到已声明为NOT NULL的列中。对于多行INSERT语句..,列被设置为列数据类型的隐式默认值。..

因此,我不确定为什么,或者从哪里,这个选择是由H2做出的。

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

https://stackoverflow.com/questions/20013154

复制
相关文章

相似问题

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