SQL Server中不同字符串类型之间的差异?
SQL中的SQL Server中不同字符串类型之间的差异?,sql,sql-server,string,sql-server-2008,Sql,Sql Server,String,Sql Server 2008,SQL中的char、nchar、ntext、nvarchar、text和varchar之间有什么区别 这些类型中的每一种都有真正的应用案例吗,或者其中一些已经被弃用了?我只知道“char”和“varchar”之间的区别 char:它可以分配指定大小的内存,无论内存是否已填充 varchar:它将根据其中的字符数分配内存,但它应该有一个称为最大大小的大小。 “n”表示对unicode字符的支持 char-指定具有固定长度存储的字符串。在有或无数据存在的情况下分配的空间 varchar-可变长度存储
char
、nchar
、ntext
、nvarchar
、text
和varchar
之间有什么区别
这些类型中的每一种都有真正的应用案例吗,或者其中一些已经被弃用了?我只知道“char”和“varchar”之间的区别
char:它可以分配指定大小的内存,无论内存是否已填充
varchar:它将根据其中的字符数分配内存,但它应该有一个称为最大大小的大小。- “n”表示对unicode字符的支持李>
- char-指定具有固定长度存储的字符串。在有或无数据存在的情况下分配的空间
- varchar-可变长度存储。空间的分配与列中数据的长度相同
- 文本-存储海量数据。为列存储分配的空间为16字节
不,它们中的任何一个都有一个很好的例子。文本是指非常大量的文本,通常不意味着可以搜索(但在某些情况下可以。无论如何,它都会很慢) char/nchar数据类型的长度是固定的,如果输入的内容较短,则会进行填充,而varchar/nvarchar数据类型的长度是可变的
n类型有unicode支持,而非n类型没有。
text
和ntext
支持varchar(max)
和nvarchar(max)
n
前缀表示unicode支持,每个字符占用的字节数是非unicode的两倍
Varchar
是可变长度。每个字段额外使用2个字节来存储长度
Char
是固定长度的。如果您知道数据的长度,请使用char
保存字节强>
在我的经验中,Text
是最不受欢迎的
请小心使用Varchar(max)
和NVarchar(max)
,因为这些字段无法索引。不推荐使用文本
Char是一个设置值。当你说char(10)时,你为每一行保留了10个字符,不管它们是否被使用。用于不应更改长度的内容(例如,邮政编码或SSN)
varchar是可变的。当您说varchar(10)时,会留出2个字节来存储数据的大小以及实际数据(可能只有4个字节)
N表示uni代码。两倍于空格。n前缀仅表示Unicode。它们“n”类型的工作方式与普通版本类似,只是它们使用Unicode文本 char是一个固定长度的字段。因此,用“Yes”填充的char(10)仍将占用10字节的存储空间 varchar是一个可变长度字段。用“Yes”填充的char(10)将占用5字节的存储空间(使用var数据类型需要2字节的开销) char(n)表示长度为x的字符串。存储=n字节。 varchar(n)持有长度为x的字符串。存储=x+2字节 vchar和nvarchar类似,只是每个字符有2个字节 一般来说,在处理固定或半固定字符串时,应该只使用char&char(超过varchar&nvarchar)。一个很好的例子是产品代码或用户类型,其长度始终为n个字符
您不应该使用text(或ntext),因为它已被弃用。varchar(max)和nvarchar(max)提供了相同的功能。
text
和ntext
已被弃用,因此让我们暂时忽略它们。对于剩下的部分,有3个维度:
- Unicode(UCS-2)与非Unicode:名称前面的
表示UnicodeN
- 固定长度vs.可变长度:
表示变量,否则固定var
- 在行vs.BLOB:
长度表示BLOB,否则为在行值(max)
:是大小为10的行内固定长度非UnicodeCHAR(10)
:是一种最大为256的行内可变长度UnicodeNVARCHAR(256)
:是一个BLOB可变长度非UnicodeVARCHAR(MAX)
text
和ntext
分别对应于新类型varchar(max)
和nvarchar(max)
当您转到详细信息时,在行
与BLOB
的含义对于较小的长度会变得模糊,因为引擎可能会优化存储并将一个BLOB放入行中,或者将一个in-row值推入“small BLOB”分配单元,但这只是一个实现细节。看
从编程的角度来看,所有类型:CHAR
,VARCHAR
,NCHAR
,NVARCHAR
,VARCHAR(MAX)
和NVARCHAR(MAX)
,都支持统一的字符串API:。旧的、已弃用的类型TEXT
和NTEXT
不支持此API,它们有一个单独的、不相关的文本API可操作。不应使用不推荐使用的类型
BLOB类型通过使用更新表集列.WRITE(@value,@offset)
语法支持高效的就地更新
当表上的行压缩时,固定长度和可变长度类型之间的差异消失。启用行压缩后,固定长度类型和可变长度以相同格式存储,尾随空格不存储在磁盘上,请参阅。请注意,页面压缩意味着行压缩