我一直在阅读char与varchar之间的差异,我的理解是如果ANSI_PADDING打开,我应该在查询时遇到差异。例如,如果ANSI_PADDING打开,并且我将列设置为char(10),我希望当我插入列时,让我们说“a”#39;它将会垫9个字符的空间。因此,我已经读过我不应该查询' a'的char列,但我需要查询_________' (_代表空格)。无论如何,下面是一个例子,我不希望返回结果,但确实如此。我不能为我的生活创建一个示例,根据ANSI_PADDING是打开/关闭返回不同的结果。
SET ANSI_PADDING ON
DECLARE @table TABLE
(
[identity] int identity(1,1)
,[char] char(10)
,[varchar] varchar(10)
)
INSERT INTO @table
SELECT 'a', 'a'
SELECT * FROM @table
WHERE [char] = 'a' -- I expect this to not return results...
SELECT * FROM @table
WHERE [varchar] = 'a'
答案 0 :(得分:3)
比较忽略char / varchar数据中的尾随空格,因此您需要比较' a'将点击仅在尾随空格('a '
,'a '
等)中有所不同的任何值。看看这个查询:
SET ANSI_PADDING ON
create table #moose (
charval char(10),
varcharval varchar(10)
)
insert #moose select 'one', 'one'
select '"' + charval + '"',
'"' + varcharval + '"'
from #moose
drop table #moose
你会看到charval确实是用空格填充的。