关于sql中varchar的长度不正确的问题

最近写个小程序,在数据表中定义了两个字段,姓名、密码,数据类型都是varchar型,长度都是6,如姓名:张三,密码123,可是在vc中用sql语句获取到这两个数据时,后面... 最近写个小程序,在数据表中定义了两个字段,姓名、密码,数据类型都是varchar型,长度都是6,如姓名:张三,密码123,可是在vc中用sql语句获取到这两个数据时,后面都被填了两个空格:‘张三 ’‘123 ‘,不知何故?不是说应该等于实际长度的吗?请高人指点,谢谢 展开
 我来答
hit_lubin
2011-07-18 · TA获得超过7889个赞
知道大有可为答主
回答量:1554
采纳率:100%
帮助的人:2008万
展开全部
我觉得您应该首先确认一下存储在数据库中的张三,123的长度,很可能是你出入的时候就已经发生了错误。varchar类型,如果数据库中数据没有空格,取值到变量中,是绝对不可能出现空格的。所以问题很可能在你插入数据的时候就有了。这种按照长度补空格,只有char行才会有。

所以先确定一下数据库表中数据的长度到底是多少?使用len函数查询一下。
select len(用户名), len(密码) from 表名字
看看长度是不是有问题。
另外,如果有空格,可以使用rtrim函数把右边的空格去掉,这样也可以保证数据的准确。
select rtrim(用户名), rtrim(密码) from 表名
ltrim是去左侧空格的函数,rtrim是去右侧空格的函数。
因为SQLSERVER中没有trim函数同时去掉左侧右侧的空格,所以要分别使用ltrim和rtrim来去掉左边和右边的空格。你这个只是在右侧补了空格,使用rtrim就够用了。
追问
通过用你的方法查询了一下,我的表里面的确没有错,姓名的长度是2,密码的长度的确是3,但是结果的确有不对,我只有把密码varchar的长度设为3才可以在vc里得到正确的结果,真的很纠结啊。
追答
这样的话,我觉得和你SQL本身没多大关系,应该是你VC里面赋值的问题。
你可以同时查出几个,比如你非变量限制只是用户名和密码,同时你也把取出的长度也赋值给变量,我觉得是不是你在赋值给变量的时候,VC内部由于变量类型还是某种问题进行了处理给你的变量用空格补位数了?
select 用户名, 密码, len(用户名), len(密码) from 表
把这个查询出的四个都给变量,前两个已经知道是有空格了,看看后两个得到的长度是不是有空格的?我觉得肯定是没有的,应该是在赋值的时候产生的问题,和数据库应该没关系。
Finish1983
2011-07-18 · TA获得超过762个赞
知道小有建树答主
回答量:1477
采纳率:100%
帮助的人:387万
展开全部
select length('张三')
from dual;
select lengthb('张三')
from dual;

获取数据的时候 使用trim就可以去掉多余的空格
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e4b2715
2011-07-18 · TA获得超过191个赞
知道小有建树答主
回答量:313
采纳率:94%
帮助的人:125万
展开全部
插入数据的时候就把空格写进去了吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
playsenlin
2011-07-18 · TA获得超过101个赞
知道小有建树答主
回答量:438
采纳率:0%
帮助的人:238万
展开全部
我以前也遇到过这个问题。不管加什么数据都会我个空格。我忘了怎么解决了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式