A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨楠 金牌黑马   /  2011-11-21 17:12  /  3402 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨楠 于 2011-11-23 18:14 编辑

Id    Name    Age
1     tom      12
2     lily         3
select Age from Table where Name='lily                              这里是无数空格...         '
大家说说能否提出3来,为什么呢

评分

参与人数 1技术分 +1 收起 理由
李荣壮 + 1

查看全部评分

7 个回复

倒序浏览
在登陆论坛的时候,登陆QQ的时候,在我们的Id后面加上一大串空格,发现登陆成功。起初我认为是程序在读取我们Id的时候trim()了一把,现在看来又好象不是,SqlServer会自动忽略多余的空格么?上面的例子里,如果有第3条数据,名字是Lily加一个空格呢?
回复 使用道具 举报
能够提出3来,如果有第3条数据,名字是Lily加一个空格呢?会把这两条数据的年龄都打出来
我觉得是字段类型决定的,默认的把空格忽略了,
char类型的值长度不够时默认用空格补齐varchar、nvarchar的存储空间是可变的
如果存储的字符中间有空格就不能忽略了

评分

参与人数 1技术分 +1 收起 理由
李荣壮 + 1

查看全部评分

回复 使用道具 举报
偶当时也这样认为低,可是用varchar和char分别做了测试,结果都是一样的,全都被提了出来,而且,select len(Name) from Table where Name='lily                  ',提出来的字符串长度你猜会怎么样?
回复 使用道具 举报
在Sql语句中,当数据类型为字符型时(如:char,nchar,varchar,nvarchar),默认会把字符后的空格忽略的,但是字符前面的和中间的空格不会忽略。

评分

参与人数 1技术分 +1 收起 理由
李荣壮 + 1

查看全部评分

回复 使用道具 举报
杨楠 发表于 2011-11-21 18:17
偶当时也这样认为低,可是用varchar和char分别做了测试,结果都是一样的,全都被提了出来,而且,select le ...

varchar类型的数据比较的时候会自动的过滤空格,而你的len(name)查询的应该是数据库里面的那个字符串长度,而不是你后面where name='lily   '的这个长度所以会输出4,
我也是通过百度出来的http://topic.csdn.net/u/20080506/15/195596bb-6fe0-436f-be5c-0dc69c83a2e8.html
http://topic.csdn.net/u/20100802/17/ed2b0d56-1bb6-4ddc-a5cc-2ce5f3391eb0.html

评分

参与人数 1技术分 +1 收起 理由
李荣壮 + 1

查看全部评分

回复 使用道具 举报
杨楠 金牌黑马 2011-11-23 14:01:19
7#
我实际的问题是:为什么select Age from Table where Name='lily                              这里是无数空格...         '
这句话可以把“lily”提出来呢?我的查询条件是lily加了一大堆空格啊,而数据库里的数据是varchar的没空格的lily,两个字符串明显不相等啊
回复 使用道具 举报
杨楠 金牌黑马 2011-11-23 18:13:30
8#
许前刚 发表于 2011-11-21 20:53
在Sql语句中,当数据类型为字符型时(如:char,nchar,varchar,nvarchar),默认会把字符后的空格忽略的 ...

这样偶就懂了,顺便问一句,如果我就是想存储lily加空格怎么整呢,在后面加某种符号吧?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马