一尘不染

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

sql

是什么区别charncharntextnvarchartextvarchar在SQL?

这些类型中的每一个是否真的都有一个应用案例,或者只是其中一些不推荐使用?


阅读 170

收藏
2021-03-17

共1个答案

一尘不染

text并且ntext已弃用,因此请暂时省略它们。剩下的就有3个维度:

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

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

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

不推荐使用的类型textntext对应新的类型varchar(max),并nvarchar(max)分别。

细节时,in-rowvs。BLOB模糊的含义很短,因为引擎 可能会
优化存储并将行中的BLOB拉入或将行中的值推入“小型BLOB”分配单元中,但这只是一个实施细节。请参阅表和索引组织

从编程的角度来看,所有类型:CHARVARCHARNCHARNVARCHARVARCHAR(MAX)NVARCHAR(MAX),支持统一的串API:字符串函数。旧的,过时,类型TEXTNTEXT
支持这个API,他们有一个独立的,deperated,TEXT API来处理。您不应使用不推荐使用的类型。

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

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

2021-03-17