GBase 8c
其他
问答

varchar类型的非空字段,插入""报错:violates not-null constraint

发表于2025-08-29 15:55:0574次浏览3个评论

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

【GBase版本】: GBASE8cV5

【操作系统】: CentOS Linux release 7.4.1708 (Core)

【CPU】: CPU op-mode(s):        32-bit, 64-bit     Model name:            Intel(R) Xeon(R) Silver 4116 CPU @ 2.10GHz

【问题描述】*:

1、创建一个表,设置str_field为非空

CREATE TABLE public.a_test (
    "FID" int4 NULL,
    value int4 NULL,
    str_field varchar(255) NOT NULL
)

2、添加数据

INSERT INTO "public"."a_test" ("FID","value","str_field") VALUES (0,1,'')

报错:SQL 错误 [23502]: ERROR: null value in column "str_field" violates not-null constraint

3、在postgis中,是可以正常添加的。请问gbase中对于""的处理,是如上述所说,不允许添加到非空的字段中么

评论

登录后才可以发表评论
用户头像
GBase用户137发表于 11个月前
GBase 8c默认将空字符串('')视为NULL值处理,因此当尝试向非空字段插入空字符串时,会触发NOT NULL约束错误。

解决方案:
方法1:修改表结构,为字段设置默认值(如DEFAULT ''):
CREATE TABLE public.a_test (
"FID" int4 NULL,
value int4 NULL,
str_field varchar(255) NOT NULL DEFAULT ''
)
这样即使插入空字符串,也会被默认值替代。

方法2:在插入数据时显式指定非空值(如空格或其他占位符):
INSERT INTO "public"."a_test" ("FID","value","str_field") VALUES (0,1,' ');

方法3:如果业务允许,将字段改为允许NULL:
ALTER TABLE public.a_test ALTER COLUMN str_field DROP NOT NULL;
最佳回答
GBase用户20955发表于 10个月前
@GBase用户137:按照方法1操作,将非空的varchar类型设置为default '',执行插入INSERT INTO "public"."a_test" ("FID","value","str_field") VALUES (0,1,''),还是会报错。
崔哥发表于 3个月前
楼上黄昏欲望休,玉梯横绝月中钩。芭蕉不展丁香结,同向春风各自愁。东南日出照高楼,楼上离人唱石州。总把春山扫眉黛,不知供得几多愁?