No armazenamento, VARCHAR(255)é inteligente o suficiente para armazenar apenas o comprimento necessário em uma determinada linha, ao contrário do CHAR(255)que sempre armazenaria 255 caracteres.
Mas já que você marcou esta questão com o MySQL, mencionarei uma dica específica do MySQL: conforme as linhas são copiadas da camada do mecanismo de armazenamento para a camada SQL, os VARCHARcampos são convertidos CHARpara obter a vantagem de trabalhar com linhas de largura fixa. Portanto, as strings na memória são preenchidas até o comprimento máximo da VARCHARcoluna declarada .
Quando sua consulta gera implicitamente uma tabela temporária, por exemplo, durante a classificação ou GROUP BY, isso pode usar muita memória. Se você usar muitos VARCHAR(255)campos para dados que não precisam ser tão longos, isso pode tornar a tabela temporária muito grande.
Você também pode gostar de saber que esse comportamento de "preenchimento" significa que uma string declarada com o conjunto de caracteres utf8 chega a três bytes por caractere, mesmo para strings armazenadas com conteúdo de um byte (por exemplo, caracteres ascii ou latin1). Da mesma forma, o conjunto de caracteres utf8mb4 faz com que a string preencha até quatro bytes por caractere na memória.
Portanto, a VARCHAR(255)in utf8 que armazena uma string curta como "Sem opinião" leva 11 bytes no disco (dez caracteres de conjuntos de caracteres inferiores, mais um byte para o comprimento), mas ocupa 765 bytes na memória e, portanto, em tabelas temporárias ou resultados classificados.
Eu ajudei usuários do MySQL que, sem saber, criaram tabelas temporárias de 1,5 GB com frequência e ocuparam seu espaço em disco. Eles tinham muitas VARCHAR(255)colunas que, na prática, armazenavam strings muito curtas.
É melhor definir a coluna com base no tipo de dados que você pretende armazenar. Ele tem benefícios para impor restrições relacionadas ao aplicativo, como outras pessoas mencionaram. Mas tem os benefícios físicos de evitar o desperdício de memória que descrevi acima.
É difícil saber qual é o endereço postal mais longo, é claro, e é por isso que muitas pessoas escolhem um longo VARCHARque certamente é mais longo do que qualquer endereço. E 255 é comum porque é o comprimento máximo de a VARCHARpara o qual o comprimento pode ser codificado com um byte. Também era o VARCHARcomprimento máximo no MySQL anterior a 5.0.