Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

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

$
0
0

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 子句指派了特定的排序规则

 

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

 

如果站点支持多语言请考虑使用 Unicode nchar nvarchar 数据类型

 

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

 

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

 

 

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

 

 

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

 

 

当执行 CREATE TABLE ALTER TABLE 如果 SET ANSI_PADDING OFF则定义为 NULL char 列将作为 varchar 处理

 

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

 

 

 

 

 

字符数据类型nchar 长度固定nvarchar 长度可变 Unicode 数据使用 UNICODE UCS-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_PADDING ON 永远适用于 nchar nvarcharSET ANSI_PADDINGOFF 不适用于 nchar nvarchar 数据类型

 

 

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

 

 


作者:TravyLee 发表于2013-3-6 11:23:05 原文链接
阅读:0 评论:0 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles