Подтвердить что ты не робот

Наиболее эффективный способ хранения IP-адреса в MySQL

Каков наиболее эффективный способ хранения и получения IP-адресов в MySQL? Сейчас я делаю:

SELECT * FROM logins WHERE ip = '1.2.3.4'

Где ip - это поле VARCHAR(15).

Есть ли лучший способ сделать это?

4b9b3361

Ответ 1

Для IPv4-адресов, вы можете сохранить их как int unsigned и использовать INET_ATON() и INET_NTOA(), чтобы вернуть IP-адрес из его числового значения и наоборот.

Пример:

SELECT INET_ATON('127.0.0.1');

+------------------------+
| INET_ATON('127.0.0.1') |
+------------------------+
|             2130706433 | 
+------------------------+
1 row in set (0.00 sec)


SELECT INET_NTOA('2130706433');

+-------------------------+
| INET_NTOA('2130706433') |
+-------------------------+
| 127.0.0.1               | 
+-------------------------+
1 row in set (0.02 sec)

Ответ 2

Если вы хотите хранить IPv4-адреса, вы можете сохранить их в 32-разрядном целочисленном поле.

Если вы хотите также поддерживать IPv6, то строка, вероятно, является самым простым для чтения/используемым способом (хотя вы можете технически сохранить их в 16-байтовом поле VARBINARY(), было бы очень неприятно пытаться генерировать операторы SQL для выбора по IP-адресу "вручную" )

Ответ 3

Самое главное - убедиться, что колонка индексирована. Это может иметь огромное значение для запросов на основе IP-адреса.

Ответ 5

Что бы ни было проще для вас работать. Вопрос о размере или скорости не является проблемой, пока вы не знаете, что это проблема при профилировании. В некоторых случаях для упрощения работы с цепочкой может быть проще работать, если вам нужно выполнить частичное сопоставление. Но, как вопрос о пространстве или производительности, не беспокойтесь об этом, если у вас нет реальной причины беспокоиться об этом.