gpt4 book ai didi

mysql - 我将 MySQL 列设置为 "NOT NULL"但我仍然可以插入一个空值

转载 作者:IT王子 更新时间:2023-10-29 00:38:48 28 4
gpt4 key购买 nike

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

create table myTable 
(
Column1 int not null,
Column2 int not null
)

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

INSERT INTO `myTable` ( `Column1` ,  `Column2` )
VALUES ( '66', '' );

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

最佳答案

空字符串

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


整数

在您的情况下,您实际上是将 STRINGS 插入到 INT 列中。这会强制执行隐式 CAST 操作。

当您的 RDBMS 将字符串 '' 转换为 INT 时,它必须得到值 0。因为 0 不是 NULL,所以它被插入。

一个更有效的测试是:

INSERT INTO `plekz`.`countries` (`Column1 ` , `Column2`)
VALUES (66, NULL);


编辑

抱歉,我只读了一半你的问题。您还询问如何停止插入 ''

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

最好的办法是首先解决插入字符串的原因。您可以使用一个存储过程,在将字符串转换为 INT 并插入它们之前获取并检查这些字符串。或者,更好的是,您可以在客户端应用程序中进行检查。

技术上可用的选项是将字段设为 CHAR 字段,然后对字段施加约束,防止插入 ''。我会强烈反对这样做。

关于mysql - 我将 MySQL 列设置为 "NOT NULL"但我仍然可以插入一个空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7264702/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com