Por que lançar texto como varchar sem especificar um comprimento truncar o texto em 30 caracteres?

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

Pergunta

Eu estava procurando um banco de dados MS-SQL Server 2005 para garantir que um campo de texto certeza era sempre um múltiplo de 8 de comprimento. Quando eu corri a seguinte consulta, eu tenho que várias linhas foram de comprimento 30. Mas quando eu investigados os registros, descobri que eles eram mais do que isso.

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

No entanto, se eu especificar o comprimento do varchar como algo mais (como na consulta a seguir), ele funciona bem.

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

Alguém sabe por que o padrão é 30 e se esta é uma definição configurável?

Outras dicas

Fundição pode acontecer quando há muitas linhas diferentes que precisam se encaixar nessa coluna. O motor de banco de dados, porque não é perfeito, não quer ir para a dificuldade de verificar o comprimento de todas as linhas possíveis de uma consulta pode retornar para descobrir quanto tempo para definir o máximo, para que ele não verifique todas as linhas - ele só leva um padrão de 30, que é uma estimativa aproximada arbitrária, uma vez que não sabe melhor.

Sem dúvida, poderia ter sido inteligente para eles para definir o padrão para algo como 256, ou qualquer que seja o comprimento máximo para VARCHAR é, mas acho que mais do que tudo, é um lembrete útil que ele realmente não sei por quanto tempo você quer que ele a menos que você diga a ele.

É um número arbitrário, e, tanto quanto eu sei não é configurável. Eu não posso pensar em um caso onde você não gostaria de especificar o comprimento.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top