declare @aa varchar(25)declare @bb int
select @aa = '000000000010'select @bb = LEN(@aa)select @bb这样返回的是12,就是实际有多少个char 元素
declare @aa char(25)declare @bb int
select @aa = '000000000010'select @bb = LEN(@aa)select @bb这样返回的是25,
请问为什么有这样的差异,他们还有别的差异吗??
select @aa = '000000000010'select @bb = LEN(@aa)select @bb这样返回的是12,就是实际有多少个char 元素
declare @aa char(25)declare @bb int
select @aa = '000000000010'select @bb = LEN(@aa)select @bb这样返回的是25,
请问为什么有这样的差异,他们还有别的差异吗??
固定长度 (char) 或可变长度 (varchar) 字符数据类型。char[(n)]长度为 n 个字节的固定长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为 n 个字节。varchar[(n)]长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。所输入的数据字符长度可以为零。
declare @aa char(25)declare @bb int
select @aa = '000000000010'有办法获得这个12吗,还是必须用varchar
截断所有尾随空格后返回一个字符串。语法
RTRIM ( character_expression ) 参数
character_expression由字符数据组成的表达式。character_expression 可以是常量、变量,也可以是字符或二进制数据的列。返回类型
varchar
select @aa = '000000000010'select @aa = LTRIM(@aa )
select @aa = RTRIM(@aa)
select @bb = LEN(@aa)select @bb
这样还是25啊还是要用varchar
你直接这样
select @bb = len(rtrim(@aa))
好像写错了,应该是:char长度不足时后面补空格,varchar的后面的空格都会自动删除,长度不足也不会补
varchar, nvarchar 是变长的
select @aa = '000000000010'select @bb = LEN(@aa)select @bb这个反回的也是12,大家有没有去试一下!真是晕
char varchar说只是存储的时候不一样,char是安固定长度来存储的,而varchar是实际长度来存储
set @bb = '10'
select len(@aa) length_a,len(@bb) length_b
---------------------------------------------
length_a length_b
2 2
varchar 长度可变,长度不够,不用空格替代
char比varchar所消耗的系统资源要多。
varchar 可变长度
set @str='abc'select len(@str)这个结果是多少?不是100,而是3!
为啥?因为len函数是忽略文本后的空格的!
LEN
返回给定字符串表达式的字符(而不是字节)个数,其中不包含尾随空格。语法
LEN ( string_expression ) 参数
string_expression要计算的字符串表达式。返回类型
int
declare @aa varchar(25)
declare @bb int
select @aa = '000000000010'
select @bb = LEN(@aa)
select @bb
这样返回的是12,
declare @aa char(25)
declare @bb int
select @aa = '000000000010'
select @bb = LEN(@aa)
select @bb
这样返回的是12,
‘===============
都是12,可能是用了len()返回给定字符串表达式的字符(而不是字节)个数,其中不包含尾随空格。相当于trim(expression)了吧,楼主怎么结果不同呢?
返回给定字符串表达式的字符(而不是字节)个数,其中不包含尾随空格。语法
LEN ( string_expression ) 参数
string_expression要计算的字符串表达式。返回类型
int
一般数据的长度不经常发生变化时用char,例如:性别如果经常发生变化就用varchar,例如:姓名char是定长的,空间不会改变,但效率高
varchar是变长的,可以节省内存空间,但是降低效率
declare @aa char(25)
declare @bb int
select @aa = '000000000010'
select @bb = LEN(@aa)
select @bb
这个还是12呢?
我是在sql server 2k下
LEN函数
返回给定字符串表达式的字符(而不是字节)个数,其中不包含尾随空格。这是原因。
其实变量本身在char和varchar长度是不同的.
declare @aaa char(15)
declare @bb int
declare @bbb int
declare @cc char(1)set @aa = '1234567890'
set @aaa = '1234567890'
set @cc = 'e'set @bb = len(@aa+@cc)
set @bbb = len(@aaa+@cc)
select @bb
select @bbb这个例子可以说明问题。
在每个变量后面加一个字符,使len()不截断空格。
varchar(n)是根据内容决定存储长度,肯定要消耗相关计算的时间。至于varchar中n的取值多少是否对效率的影响不同,我的考虑是:有区别。
毕竟程序要先开辟n个BYTE的空间,然后再根据实际缩短,可能会影响到存储空间的管理和调配。否则,微软做varchar就没必要给出自定义长度的功能了。相信微软自有道理。个人观点。