Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server中不同字符串类型之间的差异?_Sql_Sql Server_String_Sql Server 2008 - Fatal编程技术网

SQL Server中不同字符串类型之间的差异?

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-可变长度存储

SQL中的
char
nchar
ntext
nvarchar
text
varchar
之间有什么区别

这些类型中的每一种都有真正的应用案例吗,或者其中一些已经被弃用了?

我只知道“char”和“varchar”之间的区别

char:它可以分配指定大小的内存,无论内存是否已填充

varchar:它将根据其中的字符数分配内存,但它应该有一个称为最大大小的大小。

  • n”表示对unicode字符的支持
  • char-指定具有固定长度存储的字符串。在有或无数据存在的情况下分配的空间
  • varchar-可变长度存储。空间的分配与列中数据的长度相同
  • 文本-存储海量数据。为列存储分配的空间为16字节
此外,对于varchar(max)和nvarchar(max),text和ntext已被弃用。

n-prefix:unicode。 变量*:可变长度,其余为固定长度

所有的数据类型都是正确的和良好的。。。记录在案

就像这里:

真的有申请案例吗 对于这些类型中的每一种,或者是一些 他们中有多少人不赞成


不,它们中的任何一个都有一个很好的例子。

文本是指非常大量的文本,通常不意味着可以搜索(但在某些情况下可以。无论如何,它都会很慢)

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:名称前面的
    N
    表示Unicode
  • 固定长度vs.可变长度:
    var
    表示变量,否则固定
  • 在行vs.BLOB:
    (max)
    长度表示BLOB,否则为在行值
因此,您可以阅读任何类型的含义:

  • CHAR(10)
    :是大小为10的行内固定长度非Unicode
  • NVARCHAR(256)
    :是一种最大为256的行内可变长度Unicode
  • VARCHAR(MAX)
    :是一个BLOB可变长度非Unicode
不推荐使用的类型
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)
语法支持高效的就地更新

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