sql中nvarchar(max)长度测试

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql中nvarchar(max)长度测试相关的知识,希望对你有一定的参考价值。

nvarchar(max)长度测试:在使用convert强制类型转化之后 文本长度可以突破8000的上限。
并且nvarchar(max)的最大长度可达到2^31
以下为验证SQL:

Declare @A nvarchar(max)
set @A=replicate(‘*‘,9000);
print len(@A)

set @A=replicate(CONVERT(nvarchar(max),‘*‘),9000);
print len(@A)

set @A=replicate(CONVERT(nvarchar(max),‘1‘),POWER(2,26));
print len(@A)

set @A=replicate(CONVERT(nvarchar(max),‘2‘),CAST( POWER(2,30) as bigint) *2);
print len(@A)

 

不过在表中max的长度就不会那么长了,一般限制就是4000/8000,具体数值估计是要依赖于SQLServer版本了。以下是一个例子:

create table a (

data nvarchar(max)

)

 

declare @a nvarchar(max)

set @a = REPLICATE(‘a‘, 8000) + ‘b‘;

--delete from a

insert into a values(@a)

select * from a

 实际上select回来的数据只有8000字符,b没有存到数据库中。

 因此一旦要存储大于4000/8000的数据时最好还是不要依赖nvarchar(max),可以考虑ntext之类的。

 发现:convert(nvarchar(2),‘abcde‘)的操作是一个类型转化的过程,而不是数据存储的过程,所以就不存在空间大小不够导致的报错。
 而把‘abcde’插入到一个类型为nvarchar(2)的字段里时,就会提示截断字符串,因为建表时这个字段的长度就定义为只能存放2个unicode编码的长度,不论中英文。 空间不够,所以报错。

以上是关于sql中nvarchar(max)长度测试的主要内容,如果未能解决你的问题,请参考以下文章

NVARCHAR(MAX) 不能容纳 50478 个字符

NVARCHAR(MAX) 的最大长度

sqlserver2008数据库中,我想设置varchar字段的长度为20000,要怎么做

针对字符串长度超过8000的处理

T-SQL 替换函数缺少一些使用 nvarchar(max) 的匹配项

SQL Server Nvarchar(最大值)