SQL NVARCHAR和VARCHAR限制
1:NVARCHAR(max)可以存储(有时甚至更多)2GB的数据(10亿个双字节字符)。
2:NVARCHAR和VARCHAR连接时的截断取决于数据类型
varchar(n) + varchar(n)
只能容纳8000个字符,超过部分将被截断。nvarchar(n) + nvarchar(n)
只能容纳4000个字符,超过部分将被截断。varchar(n) + nvarchar(n)
只能容纳4000个字符,超过部分将被截断。因为nvarchar
具有较高的优先级,所以结果是nvarchar(4000)
[n]varchar(max)
+[n]varchar(max)
不会被截断(<2GB)。varchar(max)
+varchar(n)
不会被截断(<2GB),结果将会输出varchar(max)
。varchar(max)
+nvarchar(n)
不会被截断(<2GB),结果将会输出nvarchar(max)
。nvarchar(max)
+varchar(n)
首先将varchar(n)
输入转换为nvarchar(n)
然后进行连接。如果varchar(n)
字符串的长度 大于4000个字符,则转换为nvarchar(4000)
并且将长度超过4000的部分截断。
3:字符串文字的数据类型
- 字符串的长度<=8000的字符串数据类型将被视为varchar(n)。例如:
'Foo'
将被视为varchar(3)。
- 字符串的长度>8000的字符串数据类型将被视为varchar(max)。
- 使用'N'前缀并且字符串的长度<=4000的字符串数据类型将被视为nvarchar(n)。例如:
N'Foo'
将被视为nvarchar(3)。
- 使用'N'前缀并且字符串的长度>4000的字符串数据类型将被视为nvarchar(max)。
- 于上述两者,如果字符串的长度为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 --只会输出'中',不会输出'国'