长度为 n 个字节的固定长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为 n 个字节。char 在 SQL-92 中的同义词为 character。

2、varchar[(n)]

  长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。所输入的数      据字符长度可以为零。varchar 在 SQL-92 中的同义词为 char varying 或 character varying。

  如果没有在数据定义或变量声明语句中指定 n,则默认长度为 1。如果没有使用 CAST 函数指定 n,则默认长度为 30。

  将为使用 char 或 varchar 的对象被指派数据库的默认排序规则,除非用 COLLATE 子句另外指派了特定的排序规则。该排序规则控制用于存储字符数据的代码页。

  支持多语言的站点应考虑使用 Unicode nchar 或 nvarchar 数据类型以尽量减少字符转换问题。如果使用 char 或 varchar:

  如果希望列中的数据值大小接近一致,请使用 char。

  如果希望列中的数据值大小显著不同,请使用 varchar。

  如果执行 CREATE TABLE 或 ALTER TABLE 时 SET ANSI_PADDING 为 OFF,则一个定义为 NULL 的 char 列将被作为 varchar 处理。

  当排序规则代码页使用双字节字符时,存储大小仍然为 n 个字节。根据字符串的不同,n 个字节的存储大小可能小于 n 个字符。

  nchar 是固定长度 Unicode 数据的数据类型,nvarchar 是可变长度 Unicode 数据的数据类型,二者均使用 UNICODE UCS-2 字符集。

3、nchar(n)

  包含 n 个字符的固定长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。存储大小为 n 字节的两倍。nchar 在 SQL-92 中的同义词为 national char 和 national character。

4、nvarchar(n)

  包含 n 个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零。nvarchar 在   SQL-92 中的同义词为 national char varying 和 national character varying。

  如果没有在数据定义或变量声明语句中指定 n,则默认长度为 1。如果没有使用 CAST 函数指定 n,则默认长度为 30。

  如果希望列中所有数据项的大小接近一致,则使用 nchar。

  如果希望列中数据项的大小差异很大,则使用 nvarchar。

  使用 nchar 或 nvarchar 的对象被赋予数据库的默认排序规则,除非使用 COLLATE 子句赋予特定的排序规则。

  SET ANSI_PADDING OFF 不适用于 nchar 或 nvarchar。SET ANSI_PADDING ON 永远适用于 nchar 和 nvarchar。

一. char(varchar)与nchar(nvarchar)

1.长度比较:

使用前者存储,每个英文字符占用一个字节,中文占用两个字节,因此前者最大支持8000个英文字符,4000个中文汉字;

后者使用Unicode字符集,目的就是为了解决字符集的不兼容性,英文非英文都占用2个字节,因此不论什么字符都只是最大支持4000个字符

2.功能比较

可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失

除此之外,char与nchar,varchar和nvarchar使用方法相似

二. char(nchar)与varchar(nvarchar)的比较

1.数据存储开销。

a. 每个varchar列需要额外的两个字节,用于反映存储的数据的长度。

b. 每个可为NULL的char列,需要一些字节(空位图)来反应数据的为空性。

c. 无论实际数据的长度是多少,char按照定义的长度分配存储空间,为定长型。

d. varchar是变长字符数据类型,根据实际存储的数据长度来分配数据存储空间。

2.NULL值(空值)。

a. char列的NULL值占用存储空间。

b. varcahr列的NULL值不占用存储空间。

c. 插入同样数量的NULL值,varchar列的插入效率明显高出char列。

3.插入数据

无论插入数据涉及的列是否建立索引,char的效率都明显低于varchar。

4. 更新数据

如果更新的列上未建立索引,则char的效率低于varchar,差异不大;建立索引的话,效率较高。

5. 修改结构

a. 无论增加或是删除的列的类型是char还是varchar,操作都能较快的完成,而且效率上没有什么差异。

b. 对于增加列的宽度而言,char与varchar有非常明显的效率差异,修改varcahr列基本上不花费时间,而修改char列需要花费很长的时间。

6.数据检索

无论是否通过索引,varchar类型的数据检索略优于char的扫描。

三. 选择char还是选择varchar的建议

1.适宜于char的情况:

a. 列中的各行数据长度基本一致,长度变化不超过50字节;

b. 数据变更频繁,数据检索的需求较少。

c. 列的长度不会变化,修改char类型列的宽度的代价比较大。

d. 列中不会出现大量的NULL值。

e. 列上不需要建立过多的索引,过多的索引对char列的数据变更影响较大。

2.适宜于varchar的情况;

a. 列中的各行数据的长度差异比较大。

b. 列中数据的更新非常少,但查询非常频繁。

c. 列中经常没有数据,为NULL值或为空值。

SQL SERVER 常用字符类型的区别的更多相关文章

  1. SQL Server的字符类型

    Tip1. Char/Varcahr均为非Unicode字符,意味着放非英文字符放进去会需要进行编译,将来可能会出现问题,如果这个字段将来可能要输入中文韩文日文等,建议用Nchar或Nvarchar. ...

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

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

  3. sql server 常用的系统存储过程

      系统存储过程 说明 sp_databases 列出服务上的所有数据库 sp_helpdb 报告有关指定数据库或所有数据库的信息 sp_renamedb 更改数据库的名称 sp_tables 返回当 ...

  4. SQL Server数据库字段类型说明

    SQL Server数据库字段类型说明 目前Sql Server 数据库一共有X个字段类型,大体分为9类,分别是字符串类型.二进制码字符串数据类型.Unincode字符串数据.整数类型.精确数据类型. ...

  5. sql server 维护计划与作业关系区别

    sql server 维护计划与作业关系区别 对于二者的区别,你可以把维护计划看作是针对数据库进行维护的作业模板.自定义作业具有更广泛的用途,当然,也具有更复杂的操作.所以,如果 仅仅是做个数据库优化 ...

  6. SQL Server,MySQL,Oracle三者的区别

    SQL Server,MySQL,Oracle三者的区别 2016-10-14 转自:SQL Server,MySQL,Oracle三者的区别 目录 1 Oracle.Sql Server.MySql ...

  7. .SQL Server中 image类型数据的比较

    原文:.SQL Server中 image类型数据的比较 在SQL Server中如果你对text.ntext或者image数据类型的数据进行比较.将会提示:不能比较或排序 text.ntext 和 ...

  8. 数据库 --> SQL Server 和 Oracle 以及 MySQL 区别

    SQL Server 和 Oracle 以及 MySQL 区别 三者是目前市场占有率最高(依安装量而非收入)的关系数据库,而且很有代表性.排行第四的DB2(属IBM公司),与Oracle的定位和架构非 ...

  9. SQL Server 2008各版本介绍区别(包含企业版 开发者版 标准版 Web版 工作组版 Express版 Compact版)

    SQL Server 2008分为SQL Server 2008企业版.标准版.工作组版.Web版.开发者版.Express版.Compact 3.5版,其功能和作用也各不相同,其中SQL Serve ...

随机推荐

  1. VS2012配置Lua环境

    1.VS2012配置BabeLua插件 2.VS2012配置Lua 1.VS2012配置BabeLua插件 BabeLua插件简介: 安装方法: 关闭VS2012后直接安装BabeLua插件. 下载地 ...

  2. Leetcode#49 Anagrams

    原题地址 Anagram:变位词.两个单词是变位词关系的条件是:组成单词的字符相同,只是顺序不同 第一次看这道题看了半天没明白要干嘛,丫就不能给个样例输入输出么..后来还是看网上其他人的总结知道是怎么 ...

  3. smaa github iryoku

    dx10 demo 这东西我没法跑nsight ...这就坑大了 里面有个 RenderTargetCollection这个东西里面有很多 rendertargets 最让我苦恼的就是 sceneRT ...

  4. Android 4.4 KitKat, the browser and the Chrome WebView

    Having V8 as the JavaScript engine for the new web view, the JavaScript performance if much better, ...

  5. Mac下配置Maven

    1.Java环境变量设置就不说. 但是配置Maven需要检查下Java环境变量的设置.需要检查JAVA_HOME环境变量以及Java命令 wanyakundeMacBook-Pro:Library w ...

  6. response ,request编码

    request.setCharacterEncoding()是你设置获得数据的编码方式.response.setCharacterEncoding()是你响应时设置的编码.response.setCo ...

  7. uva12534 Binary Matrix 2(最小费用最大流)

    http://blog.csdn.net/qq564690377/article/details/17082055 做的时候觉得明显是费用流,但是真的不知道怎么建图,看了上面的博客会稍微清晰一点.后面 ...

  8. POJ 2092

    #include <iostream> #include <algorithm> #define MAXN 10005 using namespace std; int _m[ ...

  9. SQL技术内幕-13 SQL优化方法论之分析实例级别的等待

    优化方法论的第一步是在实例级别上找出什么类型的等待占用了大部分的等待时间,这可以通过查询动态管理图(DMV,dynamic management view)sys.dm_os_wait_stats 运 ...

  10. Cpp多重继承会产生的问题

    多重继承常常被认为是 OOP 中一种复杂且不必要的部分.多重继承面临 crash 的场景并非难以想象,来看下面的例子. 1. 名称冲突 来看以下情况: 如果 Dog 类以及 Bird 类都有一个名为 ...