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 --只会输出'中',不会输出'国'

SQL NVARCHAR和VARCHAR限制的更多相关文章

  1. SQL Server char,varchar,nchar,nvarchar区别

    SQL Server char,varchar,nchar,nvarchar区别 (1)       定义: char:    固定长度,存储ANSI字符,不足的补英文半角空格. nchar:   固 ...

  2. char、nvarchar和varchar区别

    这3种字符串数据类型是我们使用最多的,我们在数据库设计时到底该怎么使用了?首先我们先来分析3个数据类型的说明: 1.char CHAR的长度是固定的,最长2000个字符. 2.varchar 和 va ...

  3. nvarchar 和varchar区别

    有时候设计字段的时候,碰到nvarchar和varchar时候,是有点犹豫.所以今天就来探个究竟把. (一)  varchar是非Unicode可变长度类型,nvarchar是Unicode编码可变长 ...

  4. 怎么区分MSSQL中nvarchar和varchar的区别?

    怎么区分MSSQL中nvarchar和varchar的区别呢?下面两段代码可以帮你看到他们的区别. declare @s Nvarchar(10) set @s='那么相当于abcd可以存储多少个汉字 ...

  5. SQL 中nvarchar和varchar到底能存多少汉字和英文

    实践出真知,在SQL中,nvarchar(50)表示汉字和英文都是50,varchar(50)汉字25,英文50

  6. 英文操作系统中中文乱码(SQL中 NVARCHAR 和 VARCHAR区别)

        varchar在SQL Server中是采用单字节来存储数据的,nvarchar是使用Unico来存储数据的.中文字符存储到SQL Server中会保存为两个字节(一般采用Unico编码),英 ...

  7. SQL Server中,varchar和nvarchar如何选择

    正常情况下,我们使用varchar也可以存储中文字符,但是如果遇到操作系统是英文操作系统并且对中文字体的支持不全面时, 在SQL Server存储中文字符为varchar就会出现乱码(显示为??). ...

  8. sql nvarchar类型和varchar类型存储中文字符长度

    今天遇到了,随手记录一下.   sql server 存储数据里面 NVARCHAR 记录中文的时候是 一个中文对应一个字符串长度,记录英文也是一个字母一个长度 标点符号也是一样.          ...

  9. SQL Server中VARCHAR(MAX)和NVARCHAR(MAX)使用时要注意的问题(转载)

    在Microsoft SQLServer2005及以上的版本中,对于varchar(n).nvarchar(n)和varbinary(n)有了max的扩展.可以使用如:varchar(max).nva ...

随机推荐

  1. 深入理解Java接口和抽象类

    对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的时候会以为它们可以随意互换使用, ...

  2. Numpy 数组的切片操作

    实例+解释如下(表格):关键是要明白python中数组的下标体系.一套从左往右,一套从右往左. 1 import numpy as np 2 import sys 3 4 def main(): 5 ...

  3. 剑指offer五十五之链表中环的入口结点

    一.题目 一个链表中包含环,请找出该链表的环的入口结点. 二.思路 方法一: 假设x为环前面的路程(黑色路程),a为环入口到相遇点的路程(蓝色路程,假设顺时针走), c为环的长度(蓝色+橙色路程). ...

  4. python中如何打印某月日历

    Calendar模块有很广泛的方法用来处理年历和月历,例如打印某月的月历: import calendar cal = calendar.month(2017, 10) print ("以下 ...

  5. 【转】使用SQL Server 2012的FileTable轻松管理文件

    一 .FileStream和FileTable介绍 我们经常需要把结构化数据(int.Char等)和非结构化数据(如Varbinary(max))一起存储,那我们在怎么存储的呢? 1. 在SQL Se ...

  6. 安卓的SlidingMenu配置

    最近用到了界面的优化,使用SlidingMenu开源库比较方便,为了方便学习,我整理了一下配置过程. 1.准备资料. 首先下载这两个ActionBarSherlock和SlidingMenu,如图:

  7. 【C#】override,Abstract,Virtual 介绍及区别--转载

    要扩展或修改继承的方法.属性.索引器或事件的抽象实现或虚实现,必须使用 override 修饰符. 1. override 方法提供从基类继承的成员的新实现.通过 override 声明重写的方法称为 ...

  8. javascript数组原型方法

    1.javascript数组原型方法. <!DOCTYPE html> <html lang="en"> <head> <meta cha ...

  9. 数据库--oracle图形化管理工具和新增自定义用户

    oracle数据库图形化管理工具: 1 navicat工具很小,操作mySQL和SQLServer非常好用,但对于oracle体验性就有点差,要自己下载编码和替换oci文件.下面是解决的方法教程链接 ...

  10. mongodb 错误 SCRAM-SHA-1 authentication failed for --转

    log 日志错误信息 2018-10-24T16:14:42.244+0800 I NETWORK [initandlisten] connection accepted from 192.168.1 ...