当前位置: 代码迷 >> Sql Server >> varchar(max) 最大程度为8000? 如何突破限制
  详细解决方案

varchar(max) 最大程度为8000? 如何突破限制

热度:514   发布时间:2016-04-24 10:20:50.0
varchar(max) 最大程度为8000? 怎么突破限制
简单的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)
  相关解决方案