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. 详解linux下的串口通讯开发

    串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用.常用的串口是RS-232-C接口(又称EIA RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统.调制解调 ...

  2. js插件实现点击复制内容到粘贴板,兼容IE8

    先来看下本次需要导入的文件: 第一个是jquery.js,这个不多说: 第二个是jquery.zclip.js,第三个是zeroClipboard.swf ,这两个文件的下载链接:http://www ...

  3. 【bzoj4503】 两个串 FFT

    $FFT$套路题(然而我看错题了) 我们考虑化一下式子. 设当前比较的两个部分为$S[i....i+|T|-1]$和$T[0....|T|-1]$. 我们对串$T$中出现问号的位置全部赋值为$0$. ...

  4. 【BZOJ2082】【POI2010】Divine divisor 假的pollard-rho

    题目大意:给你$m$个数$a_i$,定义$n=\Pi_{i=1}^{m}a_i$.将$n$分解质因数为$\Pi p_i^{k_i} $,$p_i$是质数.请输出$2^{max(k_i)}-1$,以及存 ...

  5. WebDriverAPI(7)

      查看页面元素的属性 测试网址 http://www.baidu.com Java语言版本API实例 @Test public void getWebElementAttribute() { dri ...

  6. 03——Solr学习之Solr的使用(不会用)

    1.先放上次在linux搭建成功的solr管理UI界面 2.有个很蛋疼的问题我就要吐槽一下了 由于没接触过solr这玩意,在百度上一顿操作搜索怎么用,怎么导入数据,建索引库什么的,看了一大片别人的博客 ...

  7. javaWeb知识点学习(一)

    1.静态页面的传递过程 在静态WEB程序中,客户端使用WEB浏览器(IE.FireFox等)经过网络(Network)连接到服务器上,使用HTTP协议发起一个请求(Request),告诉服务器我现在需 ...

  8. 正则中str.match(pattern)与pattern.exec(str)的区别

    这两个函数除了调用对象以及参数不同之外,<javascript高级程序设计>中对exec描述比较详细,对match只是说返回数组跟exec一样.书中并没有说只说了正则在非全局模式下的情况, ...

  9. .Net Core使用 MiniProfiler 进行性能分析(转)

    转自:http://www.cnblogs.com/ideacore/p/9505425.html 官方文档: https://miniprofiler.com/dotnet/AspDotNetCor ...

  10. 用imageMagick合成图片添加图片水印

    用imageMagick合成图片的方式大致有三种, 使用convert命令加 +append或-append参数 使用convert命令加 -composite参数 直接使用composite命令来完 ...