• 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编码的长度,不论中英文。 空间不够,所以报错。

  • 相关阅读:
    网友心得 说说.NET中的反射(转帖)
    javascript的函数(转)
    asp.net基于窗体的身份验证
    创建ASP.NET WEB自定义控件(转)
    .net调用Oracle存储过程
    写字间里程序员
    世界四大杀毒软件调侃
    技巧/诀窍:在ASP.NET中重写URL(转)
    VS2008中JavaScript编辑调试器的秘密
    如何用C#语言构造蜘蛛程序
  • 原文地址:https://www.cnblogs.com/xran/p/5527317.html
Copyright © 2020-2023  润新知