在MySQL中,我有一个Column1为NOT NULL的表:
create table myTable
(
Column1 int not null,
Column2 int not null
)我仍然可以像这样插入一个空值:
INSERT INTO `myTable` ( `Column1` , `Column2` )
VALUES ( '66', '' );如何使MySQL列也不允许使用空字符串?
发布于 2011-09-01 07:46:05
空字符串
在ORACLE中,空字符串用于表示NULL。然而,在几乎所有其他情况下,空字符串仍然是一个字符串,因此不是NULL。
整型
在本例中,您实际上是将字符串插入到INT列中。这将强制执行隐式强制转换操作。
当您的关系型数据库管理系统将字符串''转换为整型时,它的值必须为0。由于0不为NULL,因此将插入该值。
更有效的测试应该是:
INSERT INTO `plekz`.`countries` (`Column1 ` , `Column2`)
VALUES (66, NULL);编辑
对不起,我只读了一半你的问题。您还会询问如何停止插入''。
您的第一个问题是您正在插入字符串,并且表被定义为包含INT字段。您可以对插入的数据施加约束,但这些约束将在转换为INT之后应用该值。除非您想要防止值0也被插入,否则您无法对表执行任何操作来防止这种情况。
更好的办法是首先说明为什么要插入字符串。您可以使用一个存储过程来获取和检查字符串,然后将其转换为整数,然后将其插入。或者,更好的是,您可以在客户端应用程序中进行检查。
一种技术上可用的选择是使字段成为CHAR字段,然后对字段施加约束,从而防止插入''。我强烈建议不要这么做。
发布于 2011-09-01 07:45:53
您插入的是空字符串,而不是NULL。该约束仅针对空值,并且在将空字符串转换为INT时,您的数据库似乎没有强制将它们转换为NULL (这提出了一个额外的问题,即为什么要将字符串文字插入到INT列中...)
发布于 2014-03-19 03:27:32
MySQL,如何禁止空字符串:
mysql> create table yar (val VARCHAR(25) not null);Query OK,0行受影响(0.02秒)
mysql> create trigger for on yar -> for each row -> begin -> if new.val = '‘then ->信号sqlstate '45000';-> end if;-> end;$$ Query OK,0行受影响(0.01秒)
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的人。
https://stackoverflow.com/questions/7264702
复制相似问题