Tsql 就像nvarchar不能正常工作一样?
在Windows NT 6.1(Build 7601:Service Pack 1)(虚拟机监控程序)上使用Microsoft SQL Server 2012-11.0.5058.0(X64)Express Edition(64位) 使用该创建/填充脚本: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
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 + '%'