You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建表时varchar字段默认空字符串设置方法及设置后显示异常的问题咨询

创建表时varchar字段默认空字符串设置方法及设置后显示异常的问题咨询

嘿,我来帮你捋清楚这个问题,你遇到的情况其实和PostgreSQL(从语法和类型转换特征来看,你用的应该是这个数据库)的内部存储逻辑以及DBeaver的显示细节有关,咱们一步步拆解:

首先先还原你遇到的场景:
你在DBeaver里执行了这条建表语句:

create table test ( 
    id varchar(36) not null primary key, 
    key varchar(120) not null default '' 
);

之后你做了两件事:

  • 在DBeaver里查看该表的DDL,发现key字段的默认值显示为NULL::character varying
  • 执行元数据查询语句:
select column_name, column_default, is_nullable from information_schema.columns where table_name = 'test'

结果里key字段的column_default同样显示为NULL::character varying

这看起来和你设置的default ''完全不符,对吧?别担心,其实你的默认值设置是正常生效的,这只是显示层面的小问题,咱们来验证下:

你可以尝试插入一条不指定key字段的记录:

insert into test (id) values ('123e4567-e89b-12d3-a456-426614174000');

然后查询这条记录的key值:

select key from test where id = '123e4567-e89b-12d3-a456-426614174000';

你会发现结果是''(空字符串),而不是NULL,这就说明你设置的默认值是正常工作的。

那为什么DDL和元数据查询会显示异常呢?
这是因为PostgreSQL在处理非空字符类型字段的空字符串默认值时,内部存储的元数据会有特殊处理,而DBeaver在读取这些元数据生成DDL时,或者information_schema.columns的column_default字段在展示时,会出现这种看似错误的显示,但实际的约束和默认值逻辑都是正确的。

如果你想看到数据库真正存储的默认值定义,可以用PostgreSQL的系统函数pg_get_expr来查询:

SELECT pg_get_expr(adbin, adrelid) as actual_default
FROM pg_attrdef
WHERE adrelid = 'test'::regclass AND adnum = (
    SELECT attnum FROM pg_attribute WHERE attrelid = 'test'::regclass AND attname = 'key'
);

执行这条语句后,你会得到真正的默认值'',这也进一步确认了数据库内部是正确保存了你的设置的。

总结一下:

  • 你设置default ''的方式完全正确,且实际生效
  • DBeaver的DDL显示和information_schema的查询结果只是展示层面的小问题,不影响功能使用
  • 可以通过pg_get_expr函数验证字段的真实默认值

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 09:54:52