简单的demo
DECLARE @str VARCHAR(max)
SET @str=replicate ('ab', 4000)
SELECT LEN(@str)
--显示8000
SET @str=replicate ('ab', 5000)
SELECT LEN(@str)
--还是显示8000
请问如果我要获取超过8000长度的字符,怎么解决呢?
------解决方案--------------------
Microsoft SQL Server? 2000 将大于 8,000 个字符的字符串和大于 8,000 个字节的二进制数据存储为称作 text 和 image 的特殊数据类型。
大于 4000 个字符的 Unicode 字符串被存储在 ntext 数据类型中。
------解决方案--------------------
varchar(max)的2G,是“容量”,不是长度,长度是一个页的最大容量也就是8K,多余部分会链接到over-flow部分
? In SQL Server 2005, non-LOB variable length columns (e.g.?varchar,?sqlvariant) may also be stored 'off-row' as part of the row-overflow feature?of having table rows longer than 8060 bytes. In this case the storage format is the same as for LOB values – a pointer in the data record pointing to a text record.
------解决方案--------------------
超过8000需要使用+号连接,如:
use tempdb
go
declare @str varchar(max)
set @str = replicate('ab',4000)
set @str = @str + replicate('ab',1000)
select len(@str)
/*
10000
*/
------解决方案--------------------
或者:
use tempdb
go
declare @str varchar(max)
set @str = replicate(convert(varchar(max),'ab'),5000)
select len(@str)