可以使用默认空字符串指定表列的能力和方式似乎取决于 RDBMS 实现。
此答案(默认为空字符串的列)和此答案(使用 DEFAULT 空字符串避免 NULL 列)表明可以使用 CREATE TABLE 列规则设置默认空字符串,该规则使用带有 DEFAULT 约束的空单引号文字。
这是我在 HSQLDB 2.2.9 中使用的 DDL 摘录。我正在使用 SQuirreL 3.4.0 对数据库执行 SQL:
CREATE CACHED TABLE Clients (
cli_id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
mRN VARCHAR(24) NOT NULL UNIQUE,
lastName VARCHAR(48) NOT NULL,
midName VARCHAR(24),
firstName VARCHAR(24) DEFAULT '' NOT NULL,
);
lastName 不能为 NULL
midName 没有列规则
firstName 不可为空,并尝试通过指定前面答案所建议的空字符串文字将其默认为空字符串。
当我使用 SQuirreL 使该表可编辑,然后在表中插入一行时,列中出现以下值:
lastName: (empty)
midName: <null>
firstName: ''
似乎 HSQLDB 中的语义 DEFAULT '' NOT NULL 导致该列默认为两个单引号而不是空字符串。当列规则 NOT NULL 在没有 DEFAULT 规则的情况下单独使用时,看起来好像在插入新行时 SQuirreL 报告了一个空字符串。
有人可以确认在 HSQLDB 中将 VARCHAR 列默认为非空、空、零长度字符串的正确方法是使用这些语义:
CREATE CACHED TABLE Clients (
cli_id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
mRN VARCHAR(24) NOT NULL UNIQUE,
lastName VARCHAR(48) NOT NULL,
midName VARCHAR(24) NOT NULL,
firstName VARCHAR(24) NOT NULL,
);
谢谢 :-)