日期:2014-05-18  浏览次数:20546 次

SQL Server 2000 的字符串怎么感觉这么怪?
感觉实在是太灵异的,感觉字符串中的未用的字节有时候会参与运算,有时候却又很正常。
比如
SQL code
declare @MyStr1 char(5)

set @MyStr1 = 'abc'
print len(@MyStr1)

go
输出的结果是3

SQL code
declare @MyStr1 char(10)
declare @MyStr2 char(10)
declare @MyStr3 char(20)

set @MyStr1 = 'abc'
set @MyStr2 = 'qwer'
set @MyStr3 = stuff(@MyStr1, 2, 0 ,@MyStr2)

print @MyStr3

go
输出的结果是“aqwer bc ”很费解为什么这里有非常多的空格。这些未用的字节难道全部参与运算了?
还是为了提高效率所以没有进行字符串的结束检测?

------解决方案--------------------
看看联机丛书len函数是怎么写的。

也看看联机丛书char类型是怎么样的。
------解决方案--------------------
SQL code

--输出的结果是3
--但
--你之前的声明变量
declare @MyStr1 varchar(10)
declare @MyStr2 varchar(10)
declare @MyStr3 varchar(20)
go
--我的生命变量
declare @MyStr1 varchar(10)
declare @MyStr2 varchar(10)
declare @MyStr3 varchar(20)

set @MyStr1 = 'abc'
set @MyStr2 = 'qwer'
set @MyStr3 = stuff(@MyStr1,2,0,@MyStr2)

print @MyStr3
--我的结果
aqwerbc
--原因:
char(x)是为这个变量申请x字节的空间,但存储的字符不够x字节,用空格补上
varchar(x)是为这个变量申请x字节的空间,但是存入的字符占用多少个字节就是多少个字节
多余的系统收回
go

------解决方案--------------------
len()函数返回的是除去右边空格后的字符数