Eu entendo a diferença básica entre um tipo CHAR
de VARCHAR
dados que CHAR
ocupa um comprimento fixo, enquanto VARCHAR
ocupa espaço com base no conteúdo que está sendo armazenado.
Mas se VARCHAR
é tão eficiente em lidar com a gestão do espaço dinamicamente com base no conteúdo que está sendo armazenado, por que bancos de dados tem suporte para CHAR
datatype, todos os CHAR(n)
campos podem ser VARCHAR(n)
campos, certo?
Você deve ler este artigo aprofundamento do tipo de dados SQL varchar e, especificamente, as considerações de armazenamento e desempenho usando a seção SQL varchar:
Observe que isso fala especificamente das diferenças de uma perspectiva do Microsoft SQL Server, YMMV para outros sistemas de banco de dados, e nem todos suportam ambos os tipos
CHAR
deVARCHAR
dados (por exemplo, SQLite não tem nenhum tipo de dados e suporta apenas o que chamaTEXT
de tipo de dados).E aqui estão algumas boas informações, na mesma linha, da perspectiva do MySQL, cortesia de RolandoMySQLDBA - DBA.StackExchange answer to Qual é o impacto no desempenho de usar CHAR vs VARCHAR em um campo de tamanho fixo? :
Surpreendentemente, no domínio do PostgreSQL, parece que as mesmas diferenças de desempenho não existem e, portanto, as diferenças práticas entre os tipos de dados são menos abundantes. Por favor, veja esta resposta do StackOverflow para a diferença entre texto e varchar (variação de caracteres) e esta resposta do DBA.StackExchange para o desempenho do índice para CHAR vs VARCHAR (Postgres) :
Eu gostaria de explicar usando um exemplo simples Você precisa armazenar o gênero no banco de dados Valores possíveis F,M,O usando char levará 1 byte para cada entrada (8 bits) usando varchar levará 1 byte e 2 byte para cada entrada (digamos 24 bits)
usando char você seria capaz de reduzir o tamanho do banco de dados para 33%