我们通常更喜欢使用空字符串('')作为默认值使所有varchar/ nvarchar列不可为空.团队中有人建议可以为空的更好,因为:
像这样的查询:
Select * From MyTable Where MyColumn IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
比这更快:
Select * From MyTable Where MyColumn == ''
Run Code Online (Sandbox Code Playgroud)
任何人都有经验来验证这是否属实?
SQL Server 2012 及更高版本中的类型所占用的空间损失是多少varchar?也就是说,如果我有 3 列类型nvarchar(或varchar就此而言),并且它们都是空的,那么表中占用了多少空间?
CREATE TABLE dbo.ReferringUrl
(
Id int IDENTITY(1, 1) NOT NULL,
RequestUrl nvarchar(384) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
ReferringUrlName nvarchar(384) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
ReferringIpAddress nvarchar(64) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
)
Run Code Online (Sandbox Code Playgroud) 好吧,当我们要选择列中不包含任何内容的记录时,我们可以使用:
SELECT * FROM my_table WHERE NULLIF(my_column, '') IS NULL;
Run Code Online (Sandbox Code Playgroud)
但是,在大多数情况下,我看到开发人员使用这个:
SELECT * FROM my_table WHERE my_column IS NULL OR my_column = ''
Run Code Online (Sandbox Code Playgroud)
这两者之间有什么偏好吗?(例如性能、默认支持、版本支持等)
如果是,请解释一下。