sql - length - ¿Por qué 30 es la longitud predeterminada para VARCHAR cuando se utiliza CAST?
varchar max sql server (5)
En SQL Server 2005, esta consulta
select len(cast(''the quick brown fox jumped over the lazy dog'' as varchar))
devuelve 30 como longitud, mientras que la cadena suministrada tiene más caracteres. Este parece ser el predeterminado. ¿Por qué 30, y no 32 o cualquier otra potencia de 2?
[EDITAR] Soy consciente de que siempre debo especificar la longitud de la conversión a varchar, pero esta fue una consulta rápida de "permite verificar algo". Las preguntas permanecen, ¿por qué 30?
No sé por qué eligieron 30, pero sucedió lo mismo en el Servidor SQL de Sybase, del cual se desarrolló el SQL Server de Microsoft. Parece ser una peculiaridad de esos RDBMS ya que no está en los estándares SQL, y otros servidores difieren en su comportamiento.
En su pregunta sobre por qué 30 y no 32 o cualquier otra potencia de 2, el tamaño de almacenamiento es n + 2 bytes para varchar (n), lo que hace que el tamaño de almacenamiento de bytes 32 sea una cadena de longitud 30. Puede ser que esto sea lo que vieron?
Luego, solo un punto de claridad sobre algunos de los comentarios: La longitud predeterminada para un campo varchar de longitud no especificada es n = 1. La longitud de cadena predeterminada que CAST o CONVERT devuelve para una conversión de este tipo de datos es 30.
Muy buena pregunta!
Microsoft eligió 30 como la longitud predeterminada para CHAR y VARCHAR en SQL Server, Access ''Jet DB Engine y varios otros de sus productos. Se origina en los viejos tiempos cuando la longitud predeterminada de una columna de nombre o dirección se estableció inicialmente en 30. Otros DB''s como Informix están predeterminados a 20 para CHAR y 255 para VARCHAR.
El tamaño predeterminado con conversión / conversión no tiene nada que ver con la asignación de memoria y, por lo tanto, el valor predeterminado (es decir, 30) no está relacionado con ninguna potencia de 2.
con respecto a por qué 30, esta es la guía de microsoft que da este valor predeterminado para cubrir los datos básicos en los primeros 30 caracteres. http://msdn.microsoft.com/en-us/library/ms176089.aspx
Aunque siempre se puede modificar la duración durante el proceso de conversión / conversión
select len(cast(''the quick brown fox jumped over the lazy dog'' as varchar(max)))
¿Por qué no especificas la longitud de varchar? es decir:
SELECT CAST(''the quick brown fox jumped over the lazy dog'' AS VARCHAR(45))
En cuanto a por qué 30, esa es la longitud predeterminada en el servidor SQL para ese tipo
Desde char y varchar (Transact-SQL) :
Cuando n no se especifica en una definición de datos o declaración de declaración de variable, la longitud predeterminada es 1. Cuando n no se especifica al usar las funciones CAST y CONVERT, la longitud predeterminada es 30.