Хранение IP-адреса в базе данных MySQL (IPv4 И IPv6)

Хорошо, теперь я знаю, что подобные вопросы, вероятно, задавались миллион раз, но я настоящий новичок в этом, и я действительно ценю вашу помощь здесь.

По сути, я хочу сохранить IP-адрес посетителей в MySQL для последующего поиска и проверки. Во-первых, мне нужно знать, какой тип поля мне нужно использовать для хранения IP-адреса. Я также хотел бы сделать систему совместимой с адресами IPv6, если это возможно.

заранее спасибо

 Mark14 мая 2012 г., 21:39
 Emil Vikström14 мая 2012 г., 21:37
Каковы ваши основные варианты использования для адресов? Собираетесь ли вы запросить их? Разделить их и запросить в соответствии с некоторыми правилами подсетей? Или они хранятся только для отображения?
 Andy14 мая 2012 г., 21:39
Хорошо это для ссылки подтверждения. Я хочу убедиться, что ссылка для подтверждения была посещена с того же IP-адреса, на котором она была создана. Поэтому я собираюсь запросить их]

Ответы на вопрос(4)

INET_ATON() вставить номер IP (который я позже прочитал, используя обратную функцию,INET_NTOA().

 26 авг. 2013 г., 18:26
Вы должны использовать INET6_NTOA и INTE6_ATON, но это не доступно в MySQL до версии 5.6.3
 Andy14 мая 2012 г., 21:48
Итак, будет ли VARBINARY (16) поддерживать IPv4 и IPv6? И как мне найти посетителей & apos; IP-адрес с помощью PHP?

достаточно большого для хранения IPv6-адреса. Самый компактный способ его хранения - это что-то вродеBINARY(16), Если вам просто нужно хранить и извлекать адреса, и вам не нужно выполнять над ними логические операции (например, операции сетевой маски для запроса, для каких IP-адресов указан префикс покрытия), этого будет достаточно. Если вам нужно выполнять логические или битовые операции, вам нужно быть более изощренным: вам нужно хранить адреса IPv6 в двух отдельных 64-битных целочисленных столбцах.

 Andy14 мая 2012 г., 21:52
Нет, мне не нужно делать что-то более причудливое (просто получить / сравнить их в запросе). Поэтому все, что мне нужно знать сейчас, - это как получить IP-адрес пользователя с помощью PHP?
Решение Вопроса

INT UNSIGNEDв то время как для IPv6 вам нуженdecimal(39,0), чтобы сохранить IP в таблице вы можете использовать функциюINET_ATON:

INSERT INTO table (ipcol) VALUES (INET_ATON('192.168.0.10'));

и получить его обратно с помощью функцииINET_NTOA:

SELECT INET_NTOA(ipcol) AS ip FROM table;

Это ответ существовал до поддержки MySQL IPv6;users should be made aware that MySQL now natively supports IPv6: https://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html

 14 мая 2012 г., 21:49
Попробуйте с inet_pton:php.net/manual/en/function.inet-pton.php
 Andy14 мая 2012 г., 22:02
Спасибо. Я собираю информацию, которая будет работать с IPv6, да?
 Andy14 мая 2012 г., 21:55
Справедливо, спасибо. Теперь, как мне найти IP-адрес пользователя в PHP?
 14 мая 2012 г., 22:00
 Andy14 мая 2012 г., 21:46
Спасибо, но я думал, что только что прочиталINET_ATON() не поддерживает IPv6. И даже если это произойдет, как я могу получить адрес IPv6 с помощью PHP?

int(10) неподписанный

http://lists.mysql.com/cluster/2781

Ваш ответ на вопрос