Pergunta

Duplicate possíveis:
Existem desvantagens de usar um varchar genérico (255) para todos os campos baseados em texto?

No MySQL você pode escolher um comprimento para o tipo de campo VARCHAR. Os possíveis valores são 1-255.

Mas o que são as suas vantagens, se você usar VARCHAR (255), que é o máximo em vez de VARCHAR (20)? Tanto quanto eu sei, o tamanho das entradas depende apenas do comprimento real da seqüência inserida.

tamanho (bytes) = comprimento + 1

Então, se você tem a palavra "Exemplo" em um campo VARCHAR (255), que teria 8 bytes. Se você tem isso em um campo VARCHAR (20), que teria 8 bytes, também. Qual é a diferença?

Eu espero que você possa me ajudar. Agradecemos antecipadamente!

Foi útil?

Solução

Confira: Referência para Varchar

Em suma, não há muito diferença a menos que você vá sobre o tamanho de 255 em seu VARCHAR que exigirá um outro byte para o prefixo comprimento.

O comprimento indica mais de uma restrição sobre os dados armazenados na coluna que qualquer outra coisa. Este inerentemente restringe o tamanho máximo de armazenamento para a coluna bem. IMHO, o comprimento deve fazer sentido no que diz respeito aos dados. Se o seu armazenamento de uma Segurança Social # não faz sentido para definir o comprimento a 128, mesmo que não lhe custa nada no armazenamento se tudo que você realmente loja é um SSN.

Outras dicas

Existem muitas razões válidas para a escolha de um valor menor do que o máximo que não estão relacionados com o desempenho. Definição de um tamanho ajuda a indicar o tipo de dados que você está armazenando e também também pode atuar como uma forma último suspiro de validação.

Por exemplo, se você está armazenando um código postal do Reino Unido, então você só precisa de 8 caracteres. A definição deste limite ajuda a tornar claro o tipo de dados que você está armazenando. Se você escolheu 255 caracteres que seria apenas complicar as coisas.

Eu não sei sobre o MySQL, mas no SQL Server ele vai deixar você definir campos de modo que o número total de bytes utilizados é maior do que o número total de bytes que realmente podem ser armazenados em um registro. Isso é uma coisa ruim. Mais cedo ou mais tarde você vai ter uma linha onde o limite é atingido e você não pode inserir os dados.

É muito melhor para projetar sua estrutura de banco de dados a considerar limites de tamanho de linha.

Além disso, sim, você não quer que as pessoas a colocar 200 caracteres em um campo quando o valor máximo deve ser 10. Se o fizerem, é quase sempre dados errados.

Você diz, bem, eu pode limitar que no nível do aplicativo. Mas os dados não entrar no banco de dados apenas de uma aplicação. Às vezes múltiplas aplicações usá-lo, por vezes, os dados são importados e às vezes é corrigido manualmente a partir da janela da consulta (atualizar todos os registros para adicionar 10% para o preço, por exemplo). Se qualquer uma dessas outras fontes de dados não sabe sobre as regras que você colocar em seu aplicativo, você terá dados ruins, inúteis em sua base de dados. A integridade dos dados deve ser executada no nível de banco de dados (que não impedi-lo de também verificar antes de tentar inserir dados) ou você não tem integridade. Além disso, ele tem sido a minha experiência que as pessoas que estão com preguiça de criar seu banco de dados muitas vezes são também muito preguiçoso para realmente colocar os limites para a aplicação e não há verificação de integridade de dados em tudo.

Eles têm uma palavra para bancos de dados sem integridade dos dados -. Inúteis

Há uma diferença semântica (e eu acredito que é a única diferença): se você tentar preencher 30 caracteres não-espaço em varchar (20), que irá produzir um erro, ao passo que ele vai ter sucesso para varchar (255). Por isso, é principalmente uma restrição adicional.

Bem, se você quer para permitir uma entrada maior, ou limitar o tamanho de entrada talvez.

Por exemplo, você pode ter first_name como um VARCHAR 20, mas talvez street_address como um VARCHAR 50 desde 20 pode não haver espaço suficiente. Ao mesmo tempo, você pode querer controlar o quão grande esse valor pode chegar.

Em outras palavras, você definiu um limite de quão grande um determinado valor pode ser, em teoria, para evitar que a mesa (e, potencialmente, as entradas de index / index) de ficar muito grande.

Você pode simplesmente usar CHAR que é uma largura fixa, bem como, mas ao contrário VARCHAR que pode ser menor, almofadas CHAR os valores (embora este faz para um acesso mais rápido SQL.

A partir de um desempenho perspectiva banco de dados sábio eu não acredito que não vai haver uma diferença.

No entanto, eu acho que um monte da decisão sobre o comprimento para uso se resume ao que você está tentando realizar e documentar o sistema para aceitar apenas os dados que ele precisa.

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