SQL中varchar和nvarchar的基本介绍及其区别

 更新时间:2014年07月28日 16:00:51   投稿:whsnow  
varchar长度为 n 个字节的可变长度且非 Unicode 的字符数据,nvarchar包含 n 个字符的可变长度 Unicode 字符数据

varchar(n)

长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。

nvarchar(n)

包含 n 个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。

两字段分别有字段值:我和coffee

那么varchar字段占2×2+6=10个字节的存储空间,而nvarchar字段占8×2=16个字节的存储空间。

如字段值只是英文可选择varchar,而字段值存在较多的双字节(中文、韩文等)字符时用nvarchar

上面是一个总结介绍,通过上面的介绍,可以知道。

varchar(4) 可以输入4个字母,也可以输入两个汉字

nvarchar(4) 可以输四个汉字,也可以输4个字母,但最多四个

char、varchar、nchar、nvarchar的区别

对于程序中的string型字段,SQLServer中有char、varchar、nchar、nvarchar四种类型来对应(暂时不考虑text和ntext),开建立数据库中,对这四种类型往往比较模糊,这里做一下对比。

定长或变长

所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;有var前缀的,表示是实际存储空间是变长的,比如varchar,nvarchar变长字符数据则不会以空格填充,比较例外的是,text存储的也是可变长。

Unicode或非Unicode

数据库中,英文字符只需要一个字节存储就足够了,但汉字和其他众多非英文字符,则需要两个字节存储。如果英文与汉字同时存在,由于占用空间数不同,容易造成混乱,导致读取出来的字符串是乱码。Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。而前缀n就表示Unicode字符,比如nchar,nvarchar,这两种类型使用了Unicode字符集。

基于以上两点来看看字段容量

char,varchar 最多8000个英文,4000个汉字
nchar,nvarchar 可存储4000个字符,无论英文还是汉字

使用(个人偏好)

如果数据量非常大,又能100%确定长度且保存只是ansi字符,那么char
能确定长度又不一定是ansi字符或者,那么用nchar;
对于超大数据,如文章内容,使用nText

其他的通用nvarchar

char、varchar、nchar、nvarchar特点比较

CHAR

CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。

VARCHAR

存储变长数据,但存储效率没有CHAR高,如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么"+1"呢?这一个字节用于保存实际使用了多大的长度。
从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。

TEXT

text存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。

NCHAR、NVARCHAR、NTEXT

这三种从名字上看比前面三种多了个"N"。和char、varchar比较起来,nchar、nvarchar最多存储4000个字符,不论是英文还是汉字;而char、varchar最多能存储8000个英文,4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。
所以一般来说,如果含有中文字符,用nchar/nvarchar,如果纯英文和数字,用char/varchar。

相关文章

  • 如何在SQL Server 2014中用资源调控器压制你的存储?

    如何在SQL Server 2014中用资源调控器压制你的存储?

    本文通过一个非常简单的例子介绍了如何利用SQL Server 2014中的资源调控器(Resource Governor)来压制你的存储,需要的朋友可以参考下
    2015-07-07
  • 浅谈SQL中Partition的相关用法

    浅谈SQL中Partition的相关用法

    本文主要介绍了浅谈SQL中Partition的相关用法,使用Partition可以根据指定的列或表达式将数据分成多个分区,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • 浅谈SQL Server中的三种物理连接操作(性能比较)

    浅谈SQL Server中的三种物理连接操作(性能比较)

    理解这三种物理连接是理解在表连接时解决性能问题的基础,下面我来对这三种连接的原理,适用场景进行描述
    2013-01-01
  • ByConity常用SQL语句详解

    ByConity常用SQL语句详解

    这篇文章主要介绍了ByConity常用SQL语句,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • sql 批量修改数据库表

    sql 批量修改数据库表

    通过sysobjects和syscolumns系统表,找到每个表的每个列,如果列类型是字符串类型的,比如varchar、nvarchar等,利用游标,对这些列进行更新。
    2009-01-01
  • SQL Server中分区表的用法

    SQL Server中分区表的用法

    本文详细讲解了SQL Server中分区表的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • SQL 创建、更新和删除视图的方法

    SQL 创建、更新和删除视图的方法

    这篇文章主要介绍了SQL 如何如何创建、更新和删除视图,文中讲解非常详细,示例代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • Mysql中错误使用SQL语句Groupby被兼容的情况

    Mysql中错误使用SQL语句Groupby被兼容的情况

    本文给大家带来了Mysql中错误使用SQL语句Groupby被兼容的情况,及sql的grop by 语句介绍。感兴趣的朋友一起通过本文学习吧
    2016-08-08
  • 安装MSDE2000提示为了安全起见,要求使用强 SA 密码的解决方法

    安装MSDE2000提示为了安全起见,要求使用强 SA 密码的解决方法

    今天下载了一个msde2000A,本想按照平时的安装习惯,找到了setup.exe安装程序,错误提示弹出一个对话框:为了安全起见,要求使用强 SA 密码。请使用SAPWD开关提供同一密码。有关详细信息,请参阅自述文件。安装程序将立即退出
    2013-08-08
  • 解析SQLServer2005的Top功能

    解析SQLServer2005的Top功能

    本篇文章是对SQLServer2005的Top功能进行了详细的分析介绍,需要的朋友参考下
    2013-06-06

最新评论