可以使用默认空字符串指定表列的能力和方式看起来与RDBMS实现相关。在HSQLDB中为列指定默认空字符串的正确方法?
此答案(default a column with empty string)和这一个(Avoid NULL columns using DEFAULT Empty String)表明可以使用带有DEFAULT约束的空单引号字面值的CREATE TABLE列规则设置默认空字符串。
这是我在HSQLDB 2.2.9中使用的DDL摘录。我执行SQL对数据库鼠笼3.4.0:
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不能为空,并试图把它通过指定前面的答案建议的空字符串文字来默认为空字符串。
当我使用松鼠使这个表格编辑,然后插入一行到表中,下面的值出现在列:
lastName: (empty)
midName: <null>
firstName: ''
看来,语义DEFAULT“”在HSQLDB事业NOT NULL该列默认为两个单引号而不是空字符串。当没有DEFAULT规则的情况下单独使用列规则NOT NULL时,看起来好像插入新行时由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,
);
感谢:-)
那好像是一只松鼠虫。也许Squirrel试图变得聪明,并检索默认表达式并将其发送到数据库以查找您不需要编辑的列。这对我的SQL客户端来说工作正常。你能看到Squirrel发送到数据库的声明吗?如果你不编辑它,那么声明不应该包含'firstName'列(或者它的值应该使用'DEFAULT'关键字来发送) –