Eu preciso armazenar números inteiros não assinados de 128 bits no MySQL e queria saber qual é o melhor tipo de dados para armazenar números tão grandes.
No momento, estou usando, binary(16)
mas isso envolve muitas funções de conversão pack(/huge number in hex .../)
.
Existe um melhor tipo de dados para armazenar um número inteiro não assinado de 128 bits?
Respostas:
Não sei qual é a melhor maneira necessariamente de armazená-lo - mas há pelo menos uma opção melhor do que usar um
varchar(39)
(ouvarchar(40)
se você precisar assiná-lo); em vez disso, use adecimal(39,0)
. Nos documentos do mysql :Ele é armazenado compactado, portanto, ocupará menos espaço que o varchar ( 18 bytes, se eu estiver fazendo minha matemática corretamente ), e eu espero que você possa fazer matemática diretamente, mas eu nunca tentei com esse grande número ver o que acontece.
fonte
Eu me peguei fazendo essa pergunta e de todas as postagens que li nunca encontrei nenhuma comparação de desempenho. Então aqui está a minha tentativa.
Criei as tabelas a seguir, preenchidas com 2.000.000 de endereços IP aleatórios de 100 redes aleatórias.
Depois, seleciono todos os endereços IP de cada rede e registro o tempo de resposta. O tempo médio de resposta na tabela twobigints é de cerca de 1 segundo, enquanto na tabela binária é de cerca de um centésimo de segundo.
Aqui estão as consultas.
Tempos médios de resposta:
fonte
Acredito que a única outra opção é armazená-lo em um
varchar(39)
campo.fonte