在DBeaver中查看字段是否允许NULL,最直接方式是右键表→编辑表→Columns标签页,查看Nullable列:Yes表示可为空,No表示NOT NULL;该值源自数据库information_schema元数据,可信度高。

怎么看表结构里某个字段是否允许 NULL
在 DBeaver 中,字段是否允许为空(即 NOT NULL 约束)最直接的查看位置是「列」(Columns)标签页里的 Nullable 列。这个值为 Yes 表示该字段可以为 NULL,No 表示不允许为空。
注意:这个信息来自数据库元数据(比如 PostgreSQL 的 is_nullable 字段、MySQL 的 IS_NULLABLE),不是 DBeaver 自行推断的,所以只要连接正常、权限足够,就可信。
- 右键表 → 编辑表(Edit Table),切换到
Columns标签页 - 找到目标字段,看
Nullable这一列的值 - 如果没显示该列,点击列头右键 → 选择列(Select Columns)→ 勾选
Nullable
为什么有时候 Nullable 显示 Yes,但建表语句里写了 NOT NULL
常见于视图、物化视图或某些封装过的查询结果。DBeaver 从系统视图读取 is_nullable 时,会按实际执行计划判断——如果底层字段被函数包裹(如 COALESCE(col, ''))、或参与了外连接,即使原字段是 NOT NULL,DBeaver 也可能标为 Yes。
- 这种情况多见于 PostgreSQL 视图和 SQL Server 的计算列
- Oracle 中函数索引列或虚拟列也容易出现误判
- 验证方式:右键表 → SQL 编辑器 → 执行
SELECT column_name, is_nullable FROM information_schema.columns WHERE table_name = 'xxx'(对应数据库语法)
通过 DDL 查看完整约束(含 CHECK、DEFAULT、主键等)
NOT NULL 是列级约束,但它可能隐式由主键或唯一约束带出,不一定显式写在 DDL 里。想确认是否真有 NOT NULL 定义,得看生成的 DDL。
- 右键表 → 生成 SQL → DDL(不是“查看 SQL”)
- 在生成的语句中搜索
NOT NULL;注意有些数据库(如 MySQL)会把主键字段的NOT NULL显式写出,有些(如 PostgreSQL)则不会 - 若字段属于主键或唯一约束且无默认值,即使 DDL 没写
NOT NULL,实际行为仍是非空
用 SQL 直查 information_schema 最可靠
图形界面有时受缓存、权限或驱动限制,漏掉约束信息。直接查系统表是最稳的方式,尤其当发现 DBeaver 显示和预期不符时。
- PostgreSQL:
SELECT column_name, is_nullable, column_default FROM information_schema.columns WHERE table_name = 'your_table' AND table_schema = 'public' - MySQL:
SELECT column_name, is_nullable, column_default FROM information_schema.columns WHERE table_name = 'your_table' AND table_schema = DATABASE() - SQL Server:
SELECT c.name, c.is_nullable FROM sys.columns c JOIN sys.tables t ON c.object_id = t.object_id WHERE t.name = 'your_table'
别依赖 DBeaver 的界面状态做生产判断——它只是个前端,真正权威的是数据库返回的元数据。特别是跨版本升级或使用较老 JDBC 驱动时,Nullable 列可能根本没被拉取。

















