2010-11-15 32 views

回答

41

textntext已被弃用,所以让我们暂时忽略它们。对于剩下的部分,有3个维度:

  • Unicode(UCS-2)与非unicode:N在名称前面表示的Unicode
  • 固定长度与可变长度:var表示变量,否则固定
  • 在排与BLOB:(max)作为长度表示BLOB,否则是IN-行值

所以用这个,你可以读取任何类型的含义:

  • CHAR(10):是大小的行内固定长度的非Unicode 10
  • NVARCHAR(256):是大小的行内可变长度的Unicode向上到256
  • VARCHAR(MAX):是BLOB可变长度的非Unicode

的弃用类型textntext对应新类型varchar(max)nvarchar(max)分别。

当你去到细节,in-rowBLOB的含义模糊的小长度为发动机可以优化存储和列拉BLOB或推行内价值为“小斑点”分配单元,但这只是一个实现细节。请参阅Table and Index Organization

从编程的角度来看,所有类型:CHARVARCHARNCHARNVARCHARVARCHAR(MAX)NVARCHAR(MAX),支持均匀的字符串API:String Functions。旧的,已弃用的类型TEXTNTEXT而不是支持这个API,他们有一个单独的,被剥离的TEXT API来操纵。您不应该使用已弃用的类型。

BLOB类型通过使用UPDATE table SET column.WRITE(@value, @offset)语法支持有效的就地更新。

当在表上进行行压缩时,固定长度类型和可变长度类型之间的区别消失。启用行压缩后,固定长度类型和可变长度以相同格式存储,尾部空格不存储在磁盘上,请参阅Row Compression Implementation。请注意,页面压缩意味着行压缩。

0

我只知道“char”和“varchar”之间。

字符:它可以分配它是否充满

VARCHAR指定大小的内存:它会根据它的字符数分配内存,但它应该有一定的大小称为最大尺寸。

7
  • 'n'表示支持unicode字符。
  • char - 指定具有固定长度存储的字符串。分配存在或不存在数据的空间。
  • varchar - 不同长度的存储。空间的分配与列中数据的长度一样多。
  • text - 存储大量数据。分配的空间为16个字节用于列存储。

另外 - 文本和ntext已弃用的varchar(max)和nvarchar(最大)

+3

-1 from me。空间不是以16字节的块分配的。它在列存储中占用16个字节,但分配方式不同。剩下的就好了。 – TomTom 2010-11-15 18:47:58

+1

@TomTom - 是的,编辑我的答案。 – 2010-11-15 18:49:58

+0

“varchar”是否仍然在该列的所有行中调整大小相同的范围? – Panzercrisis 2016-09-14 16:27:56

0

正前缀是:unicode。 var *:可变长度,其余为固定长度。

所有数据类型正确,很好...记录。

喜欢这里:

http://msdn.microsoft.com/en-us/library/ms187752.aspx

是否真的为这些类型的应用情况 ,或者是一些 人只是过时?

不,对任何一个都有很好的理由。

+1

没有好的情况下使用文本或ntext。它已被弃用,支持将从未来版本的SQL Server中删除。应该使用varchar(max)&nvarchar(max)。 – 2010-11-15 18:51:50

+0

没错。 http://msdn.microsoft.com/en-us/library/ms187993.aspx – bevacqua 2010-11-15 18:57:29

0

文本的含义是非常大量的文本,通常不是可以搜索的(但可以在某些情况下,反正它会很慢)。

char/nchar数据类型具有固定长度,如果输入的内容较短,则填充,与可变长度的varchar/nvarchar类型相反。

这n个类型都有unicode支持,其中non-n类型不支持。

2

N前缀表示支持unicode ,占用每个非Unicode字符两倍的字节。

Varchar是可变长度。您使用每个字段额外2个字节来存储长度。

Char是固定长度。如果您知道您的数据将保存多长时间,请使用char,因为您将保存字节数

Text在我的经验中大多被弃用。

请谨慎使用Varchar(max)NVarchar(max),因为这些字段无法编入索引。

+1

+1用于索引注释varchar/nvarchar(max) – 2010-11-15 19:27:57

0

文字已弃用。

Char是一个设定值。当你说char(10)时,你为每一行保留10个字符,不管它们是否被使用。将此用于不应更改长度的内容(例如,邮编或SSN)

varchar是可变的。当你说varchar(10)时,留出2个字节来存储数据的大小,以及实际数据(可能只是说4个字节)。

N代表uni-code。两次空间。

3

n前缀仅表示Unicode。除了使用Unicode文本外,它们的“n”类型与普通版本类似。

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)。一个很好的例子是一个总是n个字符的product_code或user_type。

您不应该使用文本(或ntext),因为它已被弃用。 varchar(max)& nvarchar(max)提供相同的功能。

相关问题