SQL中char
,nchar
,ntext
,nvarchar
,text
和varchar
之间的区别是什么?
是否真的存在针对这些类型中的每一种的应用案例,还是其中一些仅被弃用?
答案 0 :(得分:41)
text
和ntext
,所以我们暂时省略它们。剩下的就是3个维度:
N
表示Unicode var
表示变量,否则为固定(max)
长度表示BLOB,否则为行内值因此,您可以阅读任何类型的含义:
CHAR(10)
:是行内固定长度非Unicode,大小为10 NVARCHAR(256)
:是一个行内可变长度的Unicode,大小可达256 VARCHAR(MAX)
:是一个BLOB变量长度非Unicode 已弃用的类型text
和ntext
分别对应新类型varchar(max)
和nvarchar(max)
。
当您转到详细信息时,in-row
与BLOB
的含义模糊了较小的长度,因为引擎可以优化存储并将BLOB插入行中或将行内值推入“小BLOB”分配单元,但这只是一个实现细节。请参阅Table and Index Organization。
从编程的角度来看,所有类型:CHAR
,VARCHAR
,NCHAR
,NVARCHAR
,VARCHAR(MAX)
和NVARCHAR(MAX)
,支持统一字符串API:String Functions。旧的,已弃用的类型TEXT
和NTEXT
不支持此API,它们有一个单独的,取消的TEXT API来操作。您不应该使用已弃用的类型。
BLOB类型使用UPDATE table SET column.WRITE(@value, @offset)
语法支持高效的就地更新。
当在表上进行行压缩时,固定长度和可变长度类型之间的差异消失。启用行压缩后,固定长度类型和可变长度以相同格式存储,尾随空格不存储在磁盘上,请参阅Row Compression Implementation。请注意,页面压缩意味着行压缩。
答案 1 :(得分:7)
此外 - 对于varchar(max)和nvarchar(max)
,已弃用text和ntext答案 2 :(得分:3)
text
和ntext
deprecated赞成varchar(max)
和nvarchar(max)
答案 3 :(得分:3)
n前缀仅表示Unicode。它们的“n”类型与普通版本的工作方式类似,但它们使用Unicode文本。
char是固定长度字段。因此填充“是”的char(10)仍然需要10个字节的存储空间。
varchar是一个可变长度字段。填充“是”的char(10)将占用5个字节的存储空间(使用var数据类型需要2个字节的开销)。
char(n)持有长度为x的字符串。存储= n个字节。 varchar(n)持有长度为x的字符串。存储= x + 2个字节。
vchar和nvarchar是相似的,除了每个字符2个字节。
一般来说,你应该只使用char&使用固定或半固定字符串时,char(over varchar& nvarchar)。一个很好的例子是product_code或user_type,它总是n个字符长。
您不应该使用已弃用的文本(或ntext)。 varchar(max)& nvarchar(max)提供相同的功能。
答案 4 :(得分:2)
N
前缀表示unicode支持并占用非Unicode的每个字符的两倍字节。
Varchar
是可变长度。您使用每个字段的额外2个字节来存储长度。
Char
是固定长度的。如果您知道自己的数据有多长,请使用char
,因为您将保存字节!
Text
大多已被弃用。
警惕使用Varchar(max)
和NVarchar(max)
,因为这些字段无法编入索引。
答案 5 :(得分:0)
我只知道“char”和“varchar”。
char:它可以分配指定大小的内存,无论它是否已填充
varchar:它将根据其中的字符数分配内存,但它应该有一些称为最大大小的内容。
答案 6 :(得分:0)
n-prefix:unicode。 var *:可变长度,其余是固定长度。
所有数据类型都正确且良好地记录在案。
喜欢这里:
http://msdn.microsoft.com/en-us/library/ms187752.aspx
真的有一个应用案例吗? 对于这些类型中的每一种,或者是某些类型 他们刚被弃用了?
不,他们中的任何一个都有好的理由。
答案 7 :(得分:0)
文本适用于非常大量的文本,并且通常不是可搜索的(但在某些情况下可能是这样。但无论如何都会很慢。)
char / nchar数据类型具有固定长度,如果输入的内容较短,则填充,而varchar / nvarchar类型是可变长度。
n种类型具有unicode支持,其中非n类型不支持。
答案 8 :(得分:0)
不推荐使用文字。
Char是一个设定值。当你说char(10)时,你为每一行保留10个字符,无论它们是否被使用。将此用于不应更改长度的内容(例如,邮政编码或SSN)
varchar是变量。当你说varchar(10)时,会留出2个字节来存储数据的大小,以及实际数据(可能只说四个字节)。
N表示单码。两倍的空间。