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呢?希望有一个热心的人帮忙详细解答下,谢谢
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呢?希望有一个热心的人帮忙详细解答下,谢谢
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。
以上解释请行家批评指正。
DATALENGTH:返回任何表达式所占用的字节数。
varchar 是可变的char。它会根据字符的多少自动调整字节数
datalength返回用于表示任何表达式的字节数。所以len('汉字')=4
datalength('汉字')=2
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以上解释请行家批评指正。
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 行受影响)
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 行受影响)