为 HSQLDB 中的列指定默认空字符串的正确方法?

Posted

技术标签:

【中文标题】为 HSQLDB 中的列指定默认空字符串的正确方法?【英文标题】:Correct way to specify a default empty string for a column in HSQLDB? 【发布时间】:2013-04-02 01:21:45 【问题描述】:

使用默认空字符串指定表列的能力和方式似乎取决于 RDBMS 实现。

这个答案 (default a column with empty string) 和这个 (Avoid NULL columns using DEFAULT Empty String) 表明可以使用 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 似乎导致该列默认为两个单引号,而不是空字符串。如果在没有 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 关键字发送) 【参考方案1】:

正确的方法其实是你原来的 CREATE TABLE。如果列没有 DEFAULT 子句但有 NOT NULL 约束,则它没有默认值,并且在插入表时必须包含该列的值。

可能是 SQuirreL 客户端使用它自己的约定来显示或插入 firstName 列。

您可以使用 SQL 语句插入不完整的行,使用 HSQLDB 数据库管理器:

INSERT INTO clients(mrn, lastname) VALUES 'mrn00', 'Aname'

然后使用 SELECT 检查结果:

SELECT * FROM clients

当您切换到“查看”->“文本中的结果”时会显示此内容

CLI_ID MRN   LASTNAME MIDNAME FIRSTNAME 
------ ----- -------- ------- --------- 
0      mrn00 Aname    (null)            

【讨论】:

以上是关于为 HSQLDB 中的列指定默认空字符串的正确方法?的主要内容,如果未能解决你的问题,请参考以下文章

JAVA String 如何去掉指定字符

WPF 绑定 - 空字符串的默认值

js字符串截取

在 Java 中连接空字符串的正确方法是啥?

如何在熊猫中显示类似空字符串的列值的计数

Material UI Autocomplete 空字符串的默认值