您的位置:首页 > 数据库

SQL 2005中char、nchar、varchar、ntext and nvarchar(max)的区别

2009-11-21 20:33 696 查看
对SQL 2005中char、nchar、varchar、ntext and nvarchar(max)的一些概念一直很模糊,最近搜集一些资料,汇总如下,以便以后复习:

一、char 和varchar的区别和应用:

1.char和varchar的区别:

varchar

有指定的最大长度,这种类型的数据长度可变,但在最大长度之内,如果一个string 比最大长度小,那么它将逐字存储而不多占额外的空间。

char

是一个指定长度的类型的string,如果一个string 比设定的长度短,那么它将按照最长的长度来储存,超出string部分,填补空格。

2.char和varchar的应用:

当你的string没有固定长度的时候使用varchar(例如,姓名,城市,等等)。

当你的string有固定长度的时候使用char(例如,电话号码,区号,等等)。

二、前面带一个“n”的类型

varchar/char前面带一个“n”的类型,意味着既可以存放unicode

编码的字符也可以存放非unicode编码的字符。没有“n”,则意味着只能存放unicode编码的字符。

如果你的数据库里只有英文字符的话,那么使用nvarchar/nchar 或 varchar/char差别很小,如果处理不同国家的字符最好用nchar/nvarchar.

什么是unicode编码?

简单的说就是用两个字节表示一个字符,这是针对各国文字、符号进行统一性编码,unicode的主要用途是当你处理不同国家字符,比如日语或汉语。

三、一个例子:

Create Database test_DB

use

test_DB

drop table

T

--CHAR,VARCHAR,NVARCHAR,NTEXT,NVARCHAR MAX

--difference VARCHAR <-> NVARCHAR : N is for unicode and needs 2 bytes for a character

create table

[

dbo

].[

T

](

[

ID

] [

bigint

]

IDENTITY

(

1

,

1

) NOT NULL,

[

V_CHAR

] [

char

](

10

) NULL,

[

V_VARCHAR

] [

nvarchar

](

4001

) NULL,

[

V_TEXT

] [

ntext

] NULL,

[

V_VARCHARMAX

] [

nvarchar

](

max

) NULL

)

-- not allowed :

-- a char can only hold up to 8000 char

-- a nvarchar can only hold up to 4000 char

create table

[

dbo

].[

T

](

[

ID

] [

bigint

]

IDENTITY

(

1

,

1

) NOT NULL,

[

V_CHAR

] [

char

](

10

) NULL,

[

V_VARCHAR

] [

nvarchar

](

4000

) NULL,

[

V_TEXT

] [

ntext

] NULL,

[

V_VARCHARMAX

] [

nvarchar

](

max

) NULL

)

-- allowed

delete from

T

insert into

T

(

V_CHAR

,

V_VARCHAR

,

V_TEXT

,

V_VARCHARMAX

)

values

(

''

,

''

,

''

,

''

)

select

*

from

T

update

T

set

V_CHAR

=

'*'

update

T

set

V_VARCHAR

=

'*'

update

T

set

V_TEXT

=

'*'

update

T

set

V_VARCHARMAX

=

'*'

select

*

from

T

select

'>'

+

V_CHAR

+

'<'

from

T

--9 spaces are added

select

'>'

+

V_VARCHAR

+

'<'

from

T

--OK

select

'>'

+

V_TEXT

+

'<'

from

T

-- a ntext field can not be concatenated with other string.

select

'>'

+

V_VARCHARMAX

+

'<'

from

T

-- a varcharmax can

update

T

set

V_VARCHAR

=

replicate

(

'*'

,

4001

)

--cannot put more than 4000 chars in a varchar

update

T

set

V_VARCHAR

=

replicate

(

'*'

,

4000

)

--4000 is ok

update

T

set

V_TEXT

=

replicate

(

'*'

,

4000

)+

'hello'

+

replicate

(

'*'

,

4000

)

--more than 4000 chars allowed in ntext

update

T

set

V_VARCHARMAX

=

replicate

(

'*'

,

4000

)+

'hello'

+

replicate

(

'*'

,

4000

)

--more than 4000 chars allowed in varcharmax

--so what is the difference between text and varchar max

select

substring

(

V_VARCHAR

,

10

,

10

)

from

T

select

substring

(

V_TEXT

,

10

,

10

)

from

T

select

substring

(

V_VARCHARMAX

,

10

,

10

)

from

T

-- substring possible for all varchar,text and varcharmax

select

len

(

V_VARCHAR

)

from

T

select

len

(

V_TEXT

)

from

T

-- cannot get len of text

select

len

(

V_VARCHARMAX

)

from

T

-- ok to get length of varcharmax

select

charindex

(

'hello'

,

V_TEXT

)

from

T

-- charindex for text not always correct !

select

charindex

(

'hello'

,

V_VARCHARMAX

)

from

T

-- ok for varcharmax

select

replace

(

V_VARCHAR

,

'hello'

,

'howareyou'

)

from

T

-- ok for varchar

select

replace

(

V_TEXT

,

'hello'

,

'howareyou'

)

from

T

-- cannot use replace on text

select

replace

(

V_VARCHARMAX

,

'hello'

,

'howareyou'

)

from

T

-- ok for varcharmax

from:
http://geekswithblogs.net/claeyskurt/archive/2006/02/04/68161.aspx http://askville.amazon.com/SimilarQuestions.do?req=nvarchar-varchar-nchar-char-data-types-creating-SQL-table
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: