首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

DBA30问之CHAR(N),NCHAR(N),VARCHAR(N),NVARCHAR(N)四类别型之间的区别

2013-03-12 
DBA30问之CHAR(N),NCHAR(N),VARCHAR(N),NVARCHAR(N)四种类型之间的区别CHAR(N),VARCHAR(N),NCHAR(N),NVARC

DBA30问之CHAR(N),NCHAR(N),VARCHAR(N),NVARCHAR(N)四种类型之间的区别

CHAR(N),VARCHAR(N),NCHAR(N),NVARCHAR(N)是MSSQL的四种字符串数据类型,

 

都可以存储字符串但很多人都不清楚它们之间的区别,在选择字符

 

串类型的时候比较随意,很多时候造成了存储空间的浪费,那么它

 

们之间究竟有什么区别呢?

 

char [ ( n ) ]

 

固定长度字符数据类型,非Unicode字符数据,长度为n个字节。

 

n 的取值范围为 1至 8,000,存储大小是n个字节。如果输入的

 

字符串长度不足N  则在右边用空格补足.

 

例:

 

declare @str char(5)

set @str='ab'

select @str

select DATALENGTH(@str)

/*

ab(三个空格)

----------------------

5

*/

 

varchar [ ( n | max ) ]

 

可变长度的字符数据类型,非Unicode字符数据。n的取值范围为

 

 1 至 8,000或者max,max指示最大存储大小是 2^31-1(2^31为的次方)个字节。

 

 存储大小是输入数据的实际长度加 2 个字节。所输入数据的长度可以为 0 个字符。

 

 

例:

 

declare @str varchar(5)

set @str='ab'

select @str

select DATALENGTH(@str)

/*

ab(没有空格)

----------------------

2

*/

 

如果未在数据定义或变量声明语句中指定 n,则默认长度为 1。

 

如果在使用 CAST 和 CONVERT函数时未指定n,则默认长度为 30。

 

将为使用 char或varchar的对象指派数据库的默认排序规则,

 

除非使用 COLLATE子句指派了特定的排序规则。

 

该排序规则控制用于存储字符数据的代码页。

 

如果站点支持多语言,请考虑使用Unicodenchar或 nvarchar 数据类型,

 

以最大限度地消除字符转换问题。如果使用char或varchar,建议执行以下操作:

 

如果列数据项的大小一致,则使用char。

 

 

如果列数据项的大小差异相当大,则使用varchar。

 

 

如果列数据项大小相差很大,而且大小可能超过 8,000字节,请使用varchar(max)。

 

 

当执行 CREATETABLE或ALTER TABLE 时,如果SETANSI_PADDING为 OFF,则定义为NULL的char 列将作为 varchar处理。

 

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

 

 

 

 

 

字符数据类型(nchar长度固定,nvarchar长度可变)和Unicode数据使用 UNICODEUCS-2字符集。

 

nchar [ ( n ) ]

 

n 个字符的固定长度的Unicode字符数据。n值必须在 1到 4,000之间(含)。

 

存储大小为两倍 n 字节。

 

例:

 

declare @str1 nchar(5)

set @str1='ab'

select @str1

select DATALENGTH(@str1)

 

/*

ab(三个空格)

---------------

10

*/

 

 

 

declare @str2 nchar(5)

set @str2='我爱你小三'

select @str2

select DATALENGTH(@str2)

/*

我爱你小三

------------------

10

*/

 

nvarchar [ ( n | max ) ]

 

可变长度 Unicode 字符数据。n值在 1到 4,000之间(含)。

 

max 指示最大存储大小为 2^31-1字节。存储大小是所输入字符个数的两倍+ 2 个字节。

 

所输入数据的长度可以为 0 个字符。

 

例:

 

declare @str1 nvarchar(5)

set @str1='ab'

select @str1

select DATALENGTH(@str1)

 

/*

ab(无空格)

---------------

4

*/

 

declare @str2 nvarchar(5)

set @str2='我爱你小三'

select @str2

select DATALENGTH(@str2)

 

/*

我爱你刘桦

------------------

10

*/

 

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

 

如果列数据项的大小可能相同,请使用nchar。

 

如果列数据项的大小可能差异很大,请使用nvarchar。

 

sysname 是系统提供的用户定义数据类型,除了不可为空值外,

 

在功能上与 nvarchar(128)相同。sysname用于引用数据库对象名。

 

为使用 nchar或nvarchar的对象分配的是默认的数据库排序规则,

 

但可使用 COLLATE子句分配特定的排序规则。

 

SET ANSI_PADDINGON永远适用于nchar 和 nvarchar。SETANSI_PADDINGOFF不适用于nchar 或nvarchar数据类型。

 

 

关于SETANSI_PADDING的使用说明请参考:http://msdn.microsoft.com/zh-cn/library/ms187403(SQL.90).aspx

 

 


2楼lisw20113天前 19:21
看不懂,但是感觉好牛叉的样子
Re: TravyLee3天前 19:22
回复lisw2011n阿花 当心我让牛哥咬你
1楼shxt_xiaozhi3天前 11:26
很棒,谢谢楼主:)
Re: TravyLee3天前 14:10
回复shxt_xiaozhin内容基本上都是从联机丛书上找的。这是最详细 最权威的资料

热点排行