Как сделать ipv6 в целых числах в mysql базах данных? - PullRequest
0 голосов
/ 24 марта 2020

У меня есть одна таблица, где я храню IP-адрес. Для более быстрого доступа я также храню ip int. Это структура таблицы.

CREATE TABLE `ipv6_test` (
  `ip_string` varchar(20) DEFAULT NULL,
  `ip_int` double DEFAULT null
) ;

Я использовал следующий метод для получения целочисленной версии IP-адреса.

new BigInteger(1, com.google.common.net.InetAddresses.forString(ip).getAddress());

Все работало нормально для адресов ipv4, но мой код начал давать сбой при сохранении адресов ipv6.

Как хранить BigInteger в базе данных mysql? Я думаю использовать VARBINARY. Могу ли я создать индекс по столбцу VARBINARY?

Как производительность VARBINARY по сравнению с индексом на целое число?

1 Ответ

2 голосов
/ 24 марта 2020

INET6_ATON преобразуется в varbinary (16) для хранилища IPv4 + IPv6.

Да, вы можете использовать VARBINARY в качестве индексов. Это фактически VARCHAR без кодировки символов. Вероятно, это немного медленнее, чем целые числа, но целые не могут делать ту же работу. Вы, вероятно, не заметите это, поэтому не преждевременно оптимизируйте. Максимум всего 16 символов, так что это немного.

Если вы хотите сохранить текстовую версию для удобного поиска, создайте сгенерированный столбец , конвертирующий обратно varbinary.

...