• SQL NVARCHAR和VARCHAR限制


    1:NVARCHAR(max)可以存储(有时甚至更多)2GB的数据(10亿个双字节字符)。

    2:NVARCHAR和VARCHAR连接时的截断取决于数据类型

    1. varchar(n) + varchar(n) 只能容纳8000个字符,超过部分将被截断。
    2. nvarchar(n) + nvarchar(n) 只能容纳4000个字符,超过部分将被截断。
    3. varchar(n) + nvarchar(n)只能容纳4000个字符,超过部分将被截断。因为nvarchar具有较高的优先级,所以结果是nvarchar(4000)
    4. [n]varchar(max)[n]varchar(max)不会被截断(<2GB)。
    5. varchar(max)varchar(n)不会被截断(<2GB),结果将会输出varchar(max)
    6. varchar(max)nvarchar(n)不会被截断(<2GB),结果将会输出nvarchar(max)
    7. nvarchar(max)varchar(n)首先将varchar(n)输入转换为nvarchar(n)然后进行连接。如果varchar(n)字符串的长度 大于4000个字符,则转换为nvarchar(4000)并且将长度超过4000的部分截断

    3:字符串文字的数据类型

    1. 字符串的长度<=8000的字符串数据类型将被视为varchar(n)。例如:'Foo'将被视为varchar(3)。
    2. 字符串的长度>8000的字符串数据类型将被视为varchar(max)。
    3. 使用'N'前缀并且字符串的长度<=4000的字符串数据类型将被视为nvarchar(n)。例如:N'Foo'将被视为nvarchar(3)。
    4. 使用'N'前缀并且字符串的长度>4000的字符串数据类型将被视为nvarchar(max)。
    5. 于上述两者,如果字符串的长度为0,则n设置为1。
    -- ======================================================
    -- 1:VARCHAR(n)类型最多只能容纳8000个字符(非字)
    -- 同时验证varchar(n) + varchar(n)这种方式只能容纳8000个字符
    -- ======================================================
    /*1.1VARCHAR(9000)这样超过最大长度的定义方式会报错*/
    --DECLARE @VARCHAR_N VARCHAR(9000);    //报错,无法执行
    
    /*1.2即使定义合法,但是在后面的赋值操作中如果超过8000
    的长度照样会截断(只保留8000个字符的长度)*/
    DECLARE @VARCHAR_N VARCHAR(8000) = '';
    DECLARE @Sum INT,@Counter INT
    SET @Sum = 8005
    SET @Counter = 0;
    WHILE(@Counter < @Sum)
    BEGIN
        IF(@Counter < 8000)
        BEGIN
            SET @VARCHAR_N = @VARCHAR_N + 'A'    
        END
        ELSE
        BEGIN
            SET @VARCHAR_N = @VARCHAR_N + 'B'    
        END
        SET @Counter = @Counter + 1;
    END
    PRINT LEN(@VARCHAR_N)        --只能输出8000个字符
    PRINT @VARCHAR_N            --只会输出A,不会输出B
    
    
    -- ======================================================
    -- 2:VARCHAR(n)类型最多只能容纳4000个字
    -- ======================================================
    DECLARE @VARCHAR_N VARCHAR(8000) = '';
    DECLARE @Sum INT,@Counter INT
    SET @Sum = 8005
    SET @Counter = 0;
    WHILE(@Counter < @Sum)
    BEGIN
        IF(@Counter < 4000)
        BEGIN
            SET @VARCHAR_N = @VARCHAR_N + ''    
        END
        ELSE
        BEGIN
            SET @VARCHAR_N = @VARCHAR_N + ''    
        END
        SET @Counter = @Counter + 1;
    END
    PRINT LEN(@VARCHAR_N)        --只能输出4000个字
    PRINT @VARCHAR_N            --只会输出'中',不会输出'国'
    
    
    -- ======================================================
    -- 3:NVARCHAR(n)类型最多只能容纳4000个字,跟2的差不多
    -- 同时验证NVARCHAR(n) + NVARCHAR(n)这种方式只能容纳4000个字符
    -- ======================================================
    DECLARE @NVARCHAR_N NVARCHAR(4000) = '';
    DECLARE @Sum INT,@Counter INT
    SET @Sum = 4005
    SET @Counter = 0;
    WHILE(@Counter < @Sum)
    BEGIN
        IF(@Counter < 4000)
        BEGIN
            SET @NVARCHAR_N = @NVARCHAR_N + ''    
        END
        ELSE
        BEGIN
            SET @NVARCHAR_N = @NVARCHAR_N + ''    
        END
        SET @Counter = @Counter + 1;
    END
    PRINT LEN(@NVARCHAR_N)        --只能输出4000个字
    PRINT @NVARCHAR_N            --只会输出'中',不会输出'国'
  • 相关阅读:
    (转)Android之内存泄漏调试学习与总结
    (转)linux下bluetooth编程(七)SDP协议
    (转)Linux下Bluez的编程实现
    (转)linux下bluetooth编程(八)SDP层编程
    (转)linux下bluetooth编程(二)blueZ协议栈
    (转)linux下bluetooth编程(六)L2CAP层编程实例
    (转)linux下bluetooth编程(五)bluetooth与socket
    (转)linux下bluetooth编程(四)L2CAP层编程
    (转)linux下bluetooth编程(一)基础概念
    (转)linux下bluetooth编程(三)HCI层编程
  • 原文地址:https://www.cnblogs.com/oufeng/p/7574033.html
Copyright © 2020-2023  润新知