2

デフォルトの空の文字列を使用してテーブル列を指定できる機能と方法は、RDBMS の実装に依存するようです。

This answer ( default a column with empty string ) と this one ( Avoid NULL columns using DEFAULT Empty String ) は、DEFAULT 制約で空の単一引用符で囲まれたリテラルを使用する CREATE TABLE 列ルールでデフォルトの空の文字列を設定できることを示しています。

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 は null 許容ではなく、前の回答で示唆されているように空の文字列リテラルを指定することで、デフォルトで空の文字列にしようとします。

SQuirreL を使用してこのテーブルを編集可能にし、テーブルに行を挿入すると、次の値が列に表示されます。

lastName:    (empty)
midName:     <null>
firstName:   ''

HSQLDB のセマンティクス DEFAULT '' NOT NULL により、列が空の文字列ではなく 2 つの単一引用符にデフォルト設定されるようです。列ルール NOT NULL を DEFAULT ルールなしで単独で使用すると、新しい行が挿入されたときに SQuirreL によって空の文字列が報告されたように見えます。

HSQLDB の VARCHAR カラムのデフォルトを非 null、空、長さゼロの文字列にする正しい方法は、次のセマンティクスを使用することであることを誰かが確認できますか?

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,
);

ありがとう :-)

4

1 に答える 1