SQL中的char
,nchar
,ntext
,nvarchar
,text
和varchar
有什么区别?SQL Server中不同字符串类型之间的区别?
这些类型是否真的存在应用案例,还是其中一些仅仅被弃用?
SQL中的char
,nchar
,ntext
,nvarchar
,text
和varchar
有什么区别?SQL Server中不同字符串类型之间的区别?
这些类型是否真的存在应用案例,还是其中一些仅仅被弃用?
text
和ntext
已被弃用,所以让我们暂时忽略它们。对于剩下的部分,有3个维度:
N
在名称前面表示的Unicodevar
表示变量,否则固定(max)
作为长度表示BLOB,否则是IN-行值所以用这个,你可以读取任何类型的含义:
CHAR(10)
:是大小的行内固定长度的非Unicode 10NVARCHAR(256)
:是大小的行内可变长度的Unicode向上到256VARCHAR(MAX)
:是BLOB可变长度的非Unicode的弃用类型text
和ntext
对应新类型varchar(max)
和nvarchar(max)
分别。
当你去到细节,in-row
与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。请注意,页面压缩意味着行压缩。
我只知道“char”和“varchar”之间。
字符:它可以分配它是否充满
VARCHAR指定大小的内存:它会根据它的字符数分配内存,但它应该有一定的大小称为最大尺寸。
另外 - 文本和ntext已弃用的varchar(max)和nvarchar(最大)
-1 from me。空间不是以16字节的块分配的。它在列存储中占用16个字节,但分配方式不同。剩下的就好了。 – TomTom 2010-11-15 18:47:58
@TomTom - 是的,编辑我的答案。 – 2010-11-15 18:49:58
“varchar”是否仍然在该列的所有行中调整大小相同的范围? – Panzercrisis 2016-09-14 16:27:56
正前缀是:unicode。 var *:可变长度,其余为固定长度。
所有数据类型正确,很好...记录。
喜欢这里:
http://msdn.microsoft.com/en-us/library/ms187752.aspx
是否真的为这些类型的应用情况 ,或者是一些 人只是过时?
不,对任何一个都有很好的理由。
没有好的情况下使用文本或ntext。它已被弃用,支持将从未来版本的SQL Server中删除。应该使用varchar(max)&nvarchar(max)。 – 2010-11-15 18:51:50
没错。 http://msdn.microsoft.com/en-us/library/ms187993.aspx – bevacqua 2010-11-15 18:57:29
文本的含义是非常大量的文本,通常不是可以搜索的(但可以在某些情况下,反正它会很慢)。
char/nchar数据类型具有固定长度,如果输入的内容较短,则填充,与可变长度的varchar/nvarchar类型相反。
这n个类型都有unicode支持,其中non-n类型不支持。
text
和ntext
是deprecated赞成varchar(max)
和nvarchar(max)
N
前缀表示支持unicode ,占用每个非Unicode字符两倍的字节。
Varchar
是可变长度。您使用每个字段额外2个字节来存储长度。
Char
是固定长度。如果您知道您的数据将保存多长时间,请使用char
,因为您将保存字节数!
Text
在我的经验中大多被弃用。
请谨慎使用Varchar(max)
和NVarchar(max)
,因为这些字段无法编入索引。
+1用于索引注释varchar/nvarchar(max) – 2010-11-15 19:27:57
文字已弃用。
Char是一个设定值。当你说char(10)时,你为每一行保留10个字符,不管它们是否被使用。将此用于不应更改长度的内容(例如,邮编或SSN)
varchar是可变的。当你说varchar(10)时,留出2个字节来存储数据的大小,以及实际数据(可能只是说4个字节)。
N代表uni-code。两次空间。
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)提供相同的功能。
http://msdn.microsoft.com/en-us/library/aa258271(SQL.80).aspx – Stu 2010-11-15 18:47:12