SQL Server 2000 的字符串怎么感觉这么怪?
感觉实在是太灵异的,感觉字符串中的未用的字节有时候会参与运算,有时候却又很正常。
比如
- SQL code
declare @MyStr1 char(5)set @MyStr1 = 'abc'print len(@MyStr1)go
但
- 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 @MyStr3go
还是为了提高效率所以没有进行字符串的结束检测?
[解决办法]
看看联机丛书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()函数返回的是除去右边空格后的字符数