Мне нужно хранить 128-битные целые числа без знака в MySQL, и мне было интересно, какой тип данных лучше подходит для хранения таких больших чисел.
Прямо сейчас я использую, binary(16)
но это включает в себя много функций преобразования pack(/huge number in hex .../)
.
Есть ли лучший тип данных для хранения 128-битного целого числа без знака?
Ответы:
Я не знаю, как лучше всего хранить его, но есть хотя бы лучший вариант, чем использовать
varchar(39)
(или,varchar(40)
если вам нужно, подпись); вместо этого используйтеdecimal(39,0)
. Из документации MySQL :Он хранится в упакованном виде, поэтому он займет меньше места, чем varchar ( 18 байт, если я правильно делаю свою математику ), и я надеюсь, что вы сможете сделать математику непосредственно, но я никогда не пытался с таким большим числом, чтобы увидеть, что происходит.
источник
Я обнаружил, что задаю этот вопрос, и из всех прочитанных постов я не нашел ни одного сравнения производительности. Итак, вот моя попытка.
Я создал следующие таблицы, заполненные 2 000 000 случайных IP-адресов из 100 случайных сетей.
Затем я выбираю все IP-адреса для каждой сети и записываю время отклика. Среднее время отклика в таблице с двумя значениями составляет около 1 секунды, в то время как в двоичной таблице оно составляет около одной сотой секунды.
Вот вопросы.
Среднее время отклика:
источник
Я считаю, что единственный другой вариант - хранить его в
varchar(39)
поле.источник