text
y ntext
están en desuso, así que omitámoslos por un momento. Para lo que queda, hay 3 dimensiones:
- Unicode (UCS-2) frente a no Unicode:
N
delante del nombre denota Unicode - Longitud fija frente a longitud variable:
var
denota variable, de lo contrario fijo - En fila frente a BLOB:
(max)
como longitud denota un BLOB, de lo contrario es un valor en fila
Así que con esto, puedes leer el significado de cualquier tipo:
CHAR(10)
:es una fila no Unicode de longitud fija de tamaño 10NVARCHAR(256)
:es un Unicode de longitud variable en fila de tamaño hasta 256VARCHAR(MAX)
:es un BLOB de longitud variable no Unicode
Los tipos obsoletos text
y ntext
corresponden a los nuevos tipos varchar(max)
y nvarchar(max)
respectivamente.
Cuando vaya a los detalles, el significado de in-row
frente a BLOB
se desdibuja en longitudes pequeñas, ya que el motor puede optimice el almacenamiento y extraiga un BLOB en fila o inserte un valor en fila en la unidad de asignación 'pequeño BLOB', pero esto es solo un detalle de implementación. Consulte Organización de tablas e índices
.
Desde el punto de vista de la programación, todos los tipos:CHAR
, VARCHAR
, NCHAR
, NVARCHAR
, VARCHAR(MAX)
y NVARCHAR(MAX)
, admite una API de cadena uniforme:Funciones de cadena
. Los tipos antiguos y obsoletos TEXT
y NTEXT
no admiten esta API, tienen una API de TEXTO separada y desesperada para manipular. No debe utilizar los tipos en desuso.
Los tipos BLOB admiten actualizaciones in situ eficientes mediante el uso de la columna SET de la tabla UPDATE table SET column.WRITE(@value, @offset)
sintaxis.
La diferencia entre los tipos de longitud fija y longitud variable desaparece cuando se comprime filas en una tabla. Con la compresión de filas habilitada, los tipos de longitud fija y la longitud variable se almacenan en el mismo formato y los espacios finales no se almacenan en el disco, consulte Implementación de compresión de filas . Tenga en cuenta que la compresión de páginas implica la compresión de filas.