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
一、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
相关文章推荐
- SQL 2005中char、nchar、varchar、ntext and nvarchar(max)的区别
- SQL 2005中char、nchar、varchar、ntext and nvarchar(max)的区别
- SQL:char、varchar、text和nchar、nvarchar、ntext的区别
- SQL中char、varchar、text和nchar、nvarchar、ntext的区别
- SQL:char、varchar、text和nchar、nvarchar、ntext的区别
- 网摘__SQL中char、varchar、text和nchar、nvarchar、ntext的区别
- SQL中char、varchar、text和nchar、nvarchar、ntext的区别
- SQL中 char,nchar,varchar,nvarchar,text,ntext的区别
- 数据库-SQL中char、varchar、text和nchar、nvarchar、ntext的区别
- 数据库-SQL中char、varchar、text和nchar、nvarchar、ntext的区别
- SQL中char、varchar、text和nchar、nvarchar、ntext的区别
- SQL中char、varchar、text和nchar、nvarchar、ntext的区别
- SQL:char、varchar、text和nchar、nvarchar、ntext的区别
- SQL中char、varchar、text和nchar、nvarchar、ntext的区别
- SQL中 char、varchar、text 和 nchar、nvarchar、ntext的区别
- SQL中char、varchar、text和nchar、nvarchar、ntext的区别
- SQL中char、nchar、varchar、nvarchar、text的区别
- SQL中char、varchar、text和nchar、nvarchar、ntext的区别
- char、varchar、text和nchar、nvarchar、ntext的区别(SQL)
- SQL中char、varchar、text和nchar、nvarchar、ntext的区别