设置Ansi_Padding - 似乎没有什么区别?

时间:2016-06-03 19:08:13

标签: sql-server tsql

我一直在阅读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'

1 个答案:

答案 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确实是用空格填充的。