首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我将MySQL列设置为"NOT NULL“,但仍然可以插入空值

我将MySQL列设置为"NOT NULL“,但仍然可以插入空值
EN

Stack Overflow用户
提问于 2011-09-01 07:40:43
回答 5查看 17.8K关注 0票数 10

在MySQL中,我有一个Column1为NOT NULL的表:

代码语言:javascript
复制
create table myTable 
(
    Column1 int not null,
    Column2 int not null
)

我仍然可以像这样插入一个空值:

代码语言:javascript
复制
INSERT INTO `myTable` ( `Column1` ,  `Column2` )
VALUES ( '66', '' );

如何使MySQL列也不允许使用空字符串?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-09-01 07:46:05

空字符串

在ORACLE中,空字符串用于表示NULL。然而,在几乎所有其他情况下,空字符串仍然是一个字符串,因此不是NULL。

整型

在本例中,您实际上是将字符串插入到INT列中。这将强制执行隐式强制转换操作。

当您的关系型数据库管理系统将字符串''转换为整型时,它的值必须为0。由于0不为NULL,因此将插入该值。

更有效的测试应该是:

代码语言:javascript
复制
INSERT INTO `plekz`.`countries` (`Column1 ` , `Column2`)
VALUES (66, NULL);

编辑

对不起,我只读了一半你的问题。您还会询问如何停止插入''

您的第一个问题是您正在插入字符串,并且表被定义为包含INT字段。您可以对插入的数据施加约束,但这些约束将在转换为INT之后应用该值。除非您想要防止值0也被插入,否则您无法对表执行任何操作来防止这种情况。

更好的办法是首先说明为什么要插入字符串。您可以使用一个存储过程来获取和检查字符串,然后将其转换为整数,然后将其插入。或者,更好的是,您可以在客户端应用程序中进行检查。

一种技术上可用的选择是使字段成为CHAR字段,然后对字段施加约束,从而防止插入''。我强烈建议不要这么做。

票数 10
EN

Stack Overflow用户

发布于 2011-09-01 07:45:53

您插入的是空字符串,而不是NULL。该约束仅针对空值,并且在将空字符串转换为INT时,您的数据库似乎没有强制将它们转换为NULL (这提出了一个额外的问题,即为什么要将字符串文字插入到INT列中...)

票数 9
EN

Stack Overflow用户

发布于 2014-03-19 03:27:32

MySQL,如何禁止空字符串:

  1. 创建表:

mysql> create table yar (val VARCHAR(25) not null);Query OK,0行受影响(0.02秒)

  • 创建'before insert‘触发器以检查空字符串和不允许。

mysql> create trigger for on yar -> for each row -> begin -> if new.val = '‘then ->信号sqlstate '45000';-> end if;-> end;$$ Query OK,0行受影响(0.01秒)

  • 尝试在列中插入null和空字符串:

mysql>分隔符;mysql> insert YAR值(“”);错误1644 (45000):未处理的用户定义的异常条件mysql> insert YAR值( null );错误1048 (23000):列' val‘不能为null mysql> insert YAR值(" abc ");查询正常,影响1行(0.01秒) mysql> select * from yar;+-+|val|+-+|abc|+-+1行in set (0.00sec)

最后,对自己发牢骚,打最近的负责选择mysql而不是postgresql的人。

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

https://stackoverflow.com/questions/7264702

复制
相关文章

相似问题

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