Tsql 就像nvarchar不能正常工作一样?

Tsql 就像nvarchar不能正常工作一样?,tsql,sql-server-2012,Tsql,Sql Server 2012,在Windows NT 6.1(Build 7601:Service Pack 1)(虚拟机监控程序)上使用Microsoft SQL Server 2012-11.0.5058.0(X64)Express Edition(64位) 使用该创建/填充脚本: CREATE TABLE tbl (col CHAR (32) ) insert into tbl values ('test') 这类声明: declare @var varchar(32) = 'test' delete from tb

在Windows NT 6.1(Build 7601:Service Pack 1)(虚拟机监控程序)上使用Microsoft SQL Server 2012-11.0.5058.0(X64)Express Edition(64位)

使用该创建/填充脚本:

CREATE TABLE tbl (col CHAR (32) )
insert into tbl values ('test')
这类声明:

declare @var varchar(32) = 'test'
delete from tbl where col like @var

实际上删除了该行,但为什么要删除该行:

declare @nvar nvarchar(32) = 'test'
delete from tbl where col like @nvar

不删除该行?

根据本页

当您使用Unicode数据(nchar或nvarchar数据类型)时, 尾随空格是重要的

因为您使用的是长度为32的CHAR数据类型,所以实际存储的数据是“test”+28个空格

相比之下,您是在混合CHAR和nvarchar。由于数据类型不同,SQL Server将CHAR数据类型转换为NCHAR以执行比较

如果将列的数据类型更改为VARCHAR,则代码可以工作。您还可以将代码更改为:

delete from tbl where col like @nvar + '%'

根据这一页

当您使用Unicode数据(nchar或nvarchar数据类型)时, 尾随空格是重要的

因为您使用的是长度为32的CHAR数据类型,所以实际存储的数据是“test”+28个空格

相比之下,您是在混合CHAR和nvarchar。由于数据类型不同,SQL Server将CHAR数据类型转换为NCHAR以执行比较

如果将列的数据类型更改为VARCHAR,则代码可以工作。您还可以将代码更改为:

delete from tbl where col like @nvar + '%'