De este documento de Microsoft, +
n define la longitud de la cadena y puede ser un valor de 1 a 8,000. max indica que el tamaño máximo de almacenamiento es 2 ^ 31-1 bytes (2 GB). El tamaño de almacenamiento es la longitud real de los datos ingresados + 2 bytes.
Por favor, ayúdame a entender esto.
Los caracteres máximos para varchar parecen ser 8000
, que es mucho menos que el 2GB
valor de los datos.
Veo que hay registros en esta varchar(max)
columna de una tabla específica que tienen len(mycolumn)
> 100 000. Por lo tanto, sé que puedo obtener mucho más que 8000
caracteres en una varchar(max)
columna.
Pregunta 1: ¿Cómo 8000
entran en juego los personajes y dónde debo estar al tanto?
Pregunta 2 : ¿una consulta de lector de datos .net a esta columna siempre devolverá el resultado completo con más de 100 000 caracteres?
fuente
varchar(max)
una vez se llamótext
y se trató como un tipo de datos diferente.Respuestas:
Puedo ver por qué no entiendes esto, es un poco complicado. Todos estos son válidos:
Y sí, si intenta obtener datos de un campo VARCHAR (MAX) y alguien almacenó 2 GB allí, abróchese el cinturón.
fuente
and somebody stored 2GB in there, buckle up.
- Estuve allí con algunos archivos de blobEstablecer n en 8000 hace que entren en juego 8000 personajes. Debe conocer las referencias de Precisión, Escala y Longitud (Transact-SQL) sobre char, nchar, nvarchar y varchar. Por el contrario, establecer n en max (sin comillas) hace que SQL Server almacene (y devuelva) el número máximo de bytes (como se menciona en su cotización).
Esta es una pregunta .Net (no un servidor SQL), pero el lector de datos .Net obtiene una secuencia de bytes. Un byte no es un carácter y SQL Server devuelve bytes (no caracteres). Si n se establece en 8000 y el tipo de datos es nvarchar, SQL Server devuelve hasta 8000 bytes, que el lector de datos .Net puede interpretar como 4000 caracteres Unicode. Si n se establece en 8000 y el tipo de datos es varchar, SQL Server devuelve hasta 8000 bytes, que el lector de datos .Net puede interpretar como hasta 8000 caracteres ANSI. Si n se establece en max y el tipo de datos es nvarchar, SQL Server devuelve hasta 2 ^ 31-1 bytes, que el lector de datos .Net puede interpretar en hasta (2 ^ 31-1) / 2 caracteres. Si n se establece en max y el tipo de datos es varchar, SQL Server devuelve hasta 2 ^ 31-1 bytes, que el lector de datos .Net puede interpretar como hasta 2 ^ 31-1 caracteres ANSI.
Si elige usar char o varchar (en lugar de nchar o nvarchar) porque pueden almacenar más "caracteres" (más exactamente: bytes), debe tener en cuenta que muchos caracteres Unicode no tienen caracteres ANSI equivalentes (por lo tanto, una gran parte de nuestro los usuarios del mundo no podrán ver sus caracteres localizados / nativos en su aplicación).
fuente