SQL Server中不同字符串类型之间的区别?

时间:2010-11-15 18:41:19

标签: sql sql-server string sql-server-2008

SQL中charncharntextnvarchartextvarchar之间的区别是什么?

是否真的存在针对这些类型中的每一种的应用案例,还是其中一些仅被弃用?

9 个答案:

答案 0 :(得分:41)

不推荐使用

textntext,所以我们暂时省略它们。剩下的就是3个维度:

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

因此,您可以阅读任何类型的含义:

  • CHAR(10):是行内固定长度非Unicode,大小为10
  • NVARCHAR(256):是一个行内可变长度的Unicode,大小可达256
  • VARCHAR(MAX):是一个BLOB变量长度非Unicode

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

当您转到详细信息时,in-rowBLOB的含义模糊了较小的长度,因为引擎可以优化存储并将BLOB插入行中或将行内值推入“小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。请注意,页面压缩意味着行压缩。

答案 1 :(得分:7)

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

此外 - 对于varchar(max)和nvarchar(max)

,已弃用text和ntext

答案 2 :(得分:3)

textntext 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表示单码。两倍的空间。