Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

В каком типе данных хранить ip адреса пользователей в SQL MySQL?

Data scienceBig data+3
Анонимный вопрос
Data Science
  · 2,4 K
Пишу код и т.п.  · 18 апр 2022  · itustinov.ru
В строках varchar(39), чтобы можно было туда записывать IPv6 и чтобы не переусложнять дальнейшую работу с ними. Должно хватать этого размера, если планируется вписывать туда только сам IP или только глобальные адреса (16 байт, представленные 32-мя символами с семью разделительными двоеточиями; двойное двоеточие используется в качестве сокращения, т.е. для него резерв не требуется).
Бывают просто еще адреса с индексом зоны, которая добавляется в конце через процент. Насколько я понимаю, это используется только в локальных сетях, но не уверен. Поискал в некоторых местах. Пишут, что размер зоны не регламентируется, так что в разном софте делают по-разному — 45-48 символов. Главное — учитывать, что исключительно редко адрес может всё же быть длиннее выбранного размера, и при записи отрезать его справа.
Почему я предлагаю именно такой способ.
Часть пользователей может иметь IPv4, а часть — IPv6. Если вы попытаетесь хранить их в бинарной форме (4 и 16 байт), то вам придётся держать две колонки в базе, искать при случае по ним раздельно. Также, в языках-фреймворках, через которые вы получаете IP-адрес пользователя, вероятно уже выдают его в виде строки. Так что, не придётся преобразовывать.
Справедливости ради, стоит сказать, что в текстовом представлении IPv6 вроде бы можно сократить по-разному, что усложнит поиск, группировку по хостам. Кроме того, доля IPv6, особенно в России, небольшая и приходится, скорее всего, на мобильные устройства.
1 эксперт не согласен
Незнание принципов работы с IP адресами в MySQL.
Openstack DevOps and IBM/Informix Certified DBA . Phd in Math (Duality of spaces of...  · 18 апр 2022
Чтобы сохранить IP-адрес в MySQL, используйте целочисленный тип данных. Используя тип данных INT, мы можем сэкономить больше места в базе данных. =========== CREATE TABLE `ip_addresses` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `ip_address` int(4) unsigned NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 =========== Как видите, мы использовали... Читать далее