1.在SQL的帮助文档里面说明,varchar和text是可变长度的字符数据,但是为什么我在设计表的时候定义列为这2个类型,但是后面的长度却不可以改变,相反帮助文档里面说的固定长度的char,它的长度在设计表的时候却是可以改变的。
2.declare @aa varchar(10), @bb int, @cc char(5)
       select @aa=' 1234  '(前面一个空格,后面二个空格), @bb=123456, @cc='12'
       select datalength(@aa), len(@aa), datalength(@bb), len(@bb), datalength(@cc), len(@cc) 结果如下: 
7   5   4   6   5   2 
这段代码前面的我可以知道为什么是7和5,但是就是不知道为什么后面的值是4和6.还有,对于datalength(@cc),它的值是5,如果等于5是因为前面定义的char(5),那我就不明白了,这个5只是可存储的长度,但是实际里面只存了2个字符啊,而且前面的@aa它的长度是10,那为什么datalength(@aa)的值不是10呢?希望有一个热心的人帮忙详细解答下,谢谢

解决方案 »

  1.   

    datalength 是存储数据所占用的空间。
    len 是字符串长度,默认是移除尾部空格后的长度。varchar(10) 是可变长度的字符串存储空间,最大存储容量为10,实际存储长度以存入的字符串为准,
    所以 datalength(@aa) = 7。char(5) 是固定长度的字符串存储空间,其存储容量固定为5,
    不管实际存入的字符串长度为多少,都会在存入字符尾部添加空格补足长度。
    所以 @cc 实际上是 '12   ' (尾部自动添加了3个空格)。MS-SQL 中 int 的存储空间为4,所以 datalength(@bb) = 4,
    而 123456 转换为字符串后字符串的长度为6,所以 len(@bb) = 6。
    以上解释请行家批评指正。
      

  2.   

    LEN:        返回给定字符串表达式的字符(而不是字节)个数,其中不包含尾随空格。
    DATALENGTH:返回任何表达式所占用的字节数。
    varchar 是可变的char。它会根据字符的多少自动调整字节数
      

  3.   

    len返回给定字符串表达式的字符数(不包括尾随空格),而不是返回字节数。
    datalength返回用于表示任何表达式的字节数。所以len('汉字')=4
    datalength('汉字')=2
      

  4.   


    datalength() 返回的是实际存储长度,len()返回的是可视长度(末尾的空格忽略).
    @aa的实际存储长度是7所以datalength(@aa) = 7 ,@aa去掉末尾空格的可视长度是5所以len(@aa) = 5;
    @bb是int型,存储长度是4个字节,所以datalength(@bb) = 4 ;@bb是6位数所以len(@bb)= 6;
    @cc 是char(5),存储长度是5个字节,所以datalength(@cc) = 5,又因为,@cc就两个字母,可视长度为2 所以len(@cc) = 2顺便更正一下8楼的,一个汉字存储空间是两个字节,所以
    select datalength('汉字') = 4
    select len('汉字') = 2以上解释请行家批评指正。
      

  5.   

    呵呵 明白了datalength()方法是做什么用的了 以前很少看到datalength()这个方法只是用过len()方法
      

  6.   


    Create Table price 

    prod_id varchar(5), 
    --modifier char(5) default 'A'

    insert into price(prod_id) values ('jia')
    insert into price select 'bing'
    select prod_id ,LEN(prod_id) 长度  from price 
    drop table priceprod_id 长度
    ------- -----------
    jia     3
    bing    4(2 行受影响)
      

  7.   


    Create Table price 

    prod_id varchar(5), 
    --modifier char(5) default 'A'

    insert into price(prod_id) values ('jia')
    insert into price select 'bing'
    select prod_id ,LEN(prod_id) 长度  from price 
    drop table priceprod_id 长度
    ------- -----------
    jia     3
    bing    4(2 行受影响)