Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Quais são os casos de uso para selecionar CHAR sobre VARCHAR no SQL?


A regra geral é escolher CHAR se todas as linhas tiverem quase o mesmo comprimento . Escolha VARCHAR (ou NVARCHAR ) quando o comprimento varia significativamente. CHAR também pode ser um pouco mais rápido porque todas as linhas têm o mesmo comprimento.

Varia de acordo com a implementação do banco de dados, mas geralmente VARCHAR (ou NVARCHAR ) usa mais um ou dois bytes de armazenamento (para comprimento ou término) além dos dados reais. Então (supondo que você esteja usando um conjunto de caracteres de um byte) armazenando a palavra "FooBar"
  • CHAR(6) =6 bytes (sem sobrecarga)
  • VARCHAR(100) =8 bytes (2 bytes de sobrecarga)
  • CHAR(10) =10 bytes (4 bytes de desperdício)

A linha inferior é CHAR pode seja mais rápido e mais economia de espaço para dados de comprimento relativamente igual (com uma diferença de comprimento de dois caracteres).

Observação :O Microsoft SQL tem 2 bytes de sobrecarga para um VARCHAR. Isso pode variar de banco de dados para banco de dados, mas geralmente há pelo menos 1 byte de sobrecarga necessário para indicar comprimento ou EOL em um VARCHAR.

Como foi apontado por Gaven nos comentários:As coisas mudam quando se trata de conjuntos de caracteres de vários bytes, e é um caso em que VARCHAR se torna uma escolha muito melhor.

Uma observação sobre o comprimento declarado do VARCHAR :Como ele armazena o comprimento do conteúdo real, você não desperdiça o comprimento não utilizado. Assim, armazenando 6 caracteres em VARCHAR(6), VARCHAR(100), ou VARCHAR(MAX) usa a mesma quantidade de armazenamento. Leia mais sobre as diferenças ao usar VARCHAR(MAX). Você declara um máximo size em VARCHAR para limitar quanto é armazenado.

Nos comentários, AlwaysLearning apontou que os documentos do Microsoft Transact-SQL parecem dizer o contrário. Eu sugeriria que é um erro ou pelo menos os documentos não são claros.