首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VARCHAR诉VARCHAR(X)

VARCHAR诉VARCHAR(X)
EN

Stack Overflow用户
提问于 2014-03-11 18:04:32
回答 2查看 206关注 0票数 1

这导致“B”:

代码语言:javascript
复制
DECLARE @NAME VARCHAR(20)=' s'
IF (@NAME IS NULL OR @NAME='')
   SELECT 'A'
ELSE
   SELECT 'B'

然而,这会导致'A‘。

代码语言:javascript
复制
DECLARE @NAME VARCHAR=' s'
IF (@NAME IS NULL OR @NAME='')
   SELECT 'A'
ELSE
   SELECT 'B'

唯一的区别是VARCHAR(20)VARCHAR

这种奇怪行为的原因是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-11 18:07:21

Server将未指定长度的VARCHAR默认为长度1。如果在结合Microsoft对ANSI/ISO SQL-92的解释 (参考文献)中使用,则会在相等比较期间将比较字符串填充为等长,从而导致' '='',因此在第二次测试中出现了非直观的'A'

票数 4
EN

Stack Overflow用户

发布于 2014-03-11 18:08:25

当没有指定大小时,VARCHAR需要指定一个大小,它假定声明只有一个字符长度。

要确认这一点,可以检查变量的长度。

因为,您的if条件是检查它是否满足条件。

代码语言:javascript
复制
DECLARE @NAME VARCHAR=' s'
select datalength(@name)

returns 1 

DECLARE @NAME VARCHAR(20)=' s'
select datalength(@name)

returns 2 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22332971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档