Qual seria o melhor tipo de dados para armazenar os resultados do HASHBYTES('MD5', ...)
?
Ele produz 16 bytes de binário da seguinte forma: por exemplo
0x5CFCD77F9FF836189D2F647EBCEA183E
Eu poderia armazená-lo nos seguintes tipos de dados:
char(34)
binary(16)
(Eu acho - eu li aqui ( https://stackoverflow.com/questions/14722305/what-kind-of-datatype-should-one-use-to-store-hashes#16680423 ) que usar o mesmo algo deve retornar o mesmo número de bytes todas as vezes, independentemente da string de entrada)- outro?
Cada linha terá um valor (sem nulos) e a coluna será usada para comparação com uma coluna semelhante em outra tabela.
Qual é o melhor tipo de dados para armazenar a HASHBYTES
saída para uso conforme descrito acima?
Eu estava pensando que, como os tipos de dados de comprimento fixo às vezes podem ser mais eficientes em junções, etc. binary(16)
vs varbinary(8000)
(a saída padrão de HASHBYTES
) parece melhor, e binary(16)
vs a varchar(34)
é melhor, pois usaria menos espaço de armazenamento.
De acordo com a Books Online :
Portanto, apesar do fato de que a função tecnicamente retorna varbinary(8000), você só obterá 16 bytes com MD5. Se você está completamente certo de que só precisa do MD5, então um binário(16) fará isso. Se você quiser jogar pelo seguro e permitir qualquer algoritmo possível (atual ou futuro) que HASHBYTES possa manipular, vá com varbinary(8000).
Eu definitivamente não recomendaria um tipo char, já que isso envolveria sobrecarga de conversão de string e sobrecarga de armazenamento desnecessária.