在 SQL Server 上,不可为空的 varchar 列可以包含空字符串。
在 ORACLE 下它们不能,因为 varchar2 将 '' 视为等同于 NULL。
如果您设计一个适用于这两种 RDBMS 的数据库架构,那么在 SQL Server 上的每个不可为空的 varchar 列中添加一个不允许空字符串的约束似乎是一个好主意。
但是,制定这种约束的最佳方式是什么?
我从
if OBJECT_ID('varchar_without_empty_cols') > 0 drop table varchar_without_empty_cols
go
create table varchar_without_empty_cols (
id int ,
val varchar(10) not null CHECK (val <> '')
)
go
insert into varchar_without_empty_cols values (1, ' ') -- this ought be OK
go
insert into varchar_without_empty_cols values (2, '') -- this has to violate the check
go
insert into varchar_without_empty_cols values (3, null) -- this violates the not null
go
select * from varchar_without_empty_cols
但是这个约束不仅禁止空字符串,这是有意的,而且还禁止由单个字符组成的字符串,这不是我想要的。
要允许仅包含空格的字符串但不允许空字符串,您可以使用