text
e ntext
estão obsoletos, então vamos omiti-los por um momento. Para o que resta, existem 3 dimensões:- Unicode (UCS-2) x não unicode:
N
na frente do nome denota Unicode - Comprimento fixo x comprimento variável:
var
denota variável, caso contrário fixo - Em linha x BLOB:
(max)
como comprimento denota um BLOB, caso contrário é um valor em linha
Então, com isso, você pode ler o significado de qualquer tipo:
CHAR(10)
:é um comprimento fixo em linha não Unicode de tamanho 10NVARCHAR(256)
:é um Unicode de comprimento variável em linha de tamanho até 256VARCHAR(MAX)
:é um comprimento variável BLOB não Unicode
Os tipos obsoletos
text
e ntext
correspondem aos novos tipos varchar(max)
e nvarchar(max)
respectivamente. Quando você acessa detalhes, o significado de
in-row
vs. BLOB
borrões para pequenos comprimentos como o motor pode otimize o armazenamento e puxe um BLOB em linha ou envie um valor em linha para a unidade de alocação 'pequeno BLOB', mas isso é apenas um detalhe de implementação. Consulte Organização de tabelas e índices
. Do ponto de vista da programação, todos os tipos:
CHAR
, VARCHAR
, NCHAR
, NVARCHAR
, VARCHAR(MAX)
e NVARCHAR(MAX)
, suporte uma API de string uniforme:String Functions
. Os tipos antigos e obsoletos TEXT
e NTEXT
não suportam esta API, eles têm uma API de TEXTO separada e independente para manipular. Você não deve usar os tipos obsoletos. Os tipos BLOB suportam atualizações in-loco eficientes usando o
UPDATE table SET column.WRITE(@value, @offset)
sintaxe. A diferença entre os tipos de comprimento fixo e de comprimento variável desaparece durante a compactação de linha em uma tabela. Com a compactação de linha habilitada, os tipos de comprimento fixo e comprimento variável são armazenados no mesmo formato e os espaços à direita não são armazenados no disco, consulte Implementação de compactação de linha . Observe que a compactação de página implica compactação de linha.