¿Por qué la fundición de texto como varchar sin especificar una longitud truncar el texto a 30 caracteres?

StackOverflow https://stackoverflow.com/questions/777394

Pregunta

Yo estaba buscando una base de datos MS-SQL Server 2005 para asegurarse de que un determinado campo de texto era siempre un múltiplo de 8 en longitud. Cuando me encontré con la siguiente consulta, tengo que varias filas eran de longitud 30. Pero cuando investigué esos registros, hemos observado que eran más que eso.

select distinct len(cast(textfield as varchar)) from tablename

Sin embargo, si se especifica la longitud de la varchar como algo más largo (como en la siguiente consulta), que trabaja muy bien.

select distinct len(cast(textfield as varchar(1000))) from tablename

Alguien sabe por qué el valor predeterminado es 30 y si esto es un valor configurable?

Otros consejos

Fundición puede suceder cuando hay muchas filas diferentes que necesitan para adaptarse a esa columna. El motor de base de datos, ya que no es perfecto, no quiere ir a la dificultad de comprobar la longitud de todas las filas posibles una consulta podría regresar para averiguar cuánto tiempo se debe establecer el máximo, por lo que no se comprueba ninguna fila - sólo se necesita un valor predeterminado de 30, que es una estimación aproximada arbitraria, ya que no sabe qué hacer.

Podría decirse que podrían haber sido inteligente para ellos para establecer el valor predeterminado a algo así como 256, o lo que sea la longitud máxima de VARCHAR es, pero creo que más que nada, es un útil recordatorio de que realmente no sabe cuánto tiempo usted quiere que a menos que usted le indique.

Es un número arbitrario, y por lo que yo sé no es configurable. No puedo pensar en un caso en el que no desea especificar la longitud.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top