在 PostgreSQL 的表中插入一个 'NULL' 字符串

0 postgresql null

我想知道是否可以在具有NOT NULL约束的列中插入“空”字符串。

我正在使用 PostgreSQL,尽管这可能也适用于其他数据库管理系统。

查询如下所示

INSERT INTO originators(originator, id, regexp)
VALUES ('null', 1, -1);
Run Code Online (Sandbox Code Playgroud)

这是表设计:

CREATE TABLE originators
(
      originator    varchar(30)    NOT NULL
    , id            int            NOT NULL
    , regexp        int            NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

这里原始列有一个NOT NULL约束,所以表中不应该有 NULL 值。

但是,当我查询表时,我看到的是:

?????????????????????????????????
? 创始者?ID ?正则表达式?
?????????????????????????????????
? 空值 ?1 ? -1 ?
?????????????????????????????????

这怎么可能?

小智 6

'NULL'与 不同NULL,第一个是字符串,就像任何其他字符串一样,因此您的约束 ( NOT NULL) 将不起作用。

我认为您正在使用一种编程语言(如 PHP 或 Java),将您的值放在一个带有变量的字符串中,例如

INSERT INTO originators(originator, id, regexp) 
VALUES ('$variable', $id, $regexp); 
Run Code Online (Sandbox Code Playgroud)

所以在这种情况下,你必须更正你的代码以防止引号,或者如果你不能这样做,你的约束应该是CHECK(upper(originator) != 'NULL').