|
|
|
| У меня есть база данных IP адресов (диапазон и страна). Есть ли в MySQL функции для работы с IP? Надо по заданному IP определить страну. | |
|
|
|
|
|
|
|
для: Евгений Петров
(29.09.2005 в 00:04)
| | Ну единственные функции - это INET_ATON() и INET_NTOA() для преобразования IP-адреса в число и обратно... Что-то не очень понятна задача - какая у вас структура базы данных? | |
|
|
|
|
|
|
|
для: cheops
(29.09.2005 в 00:37)
| | Да это то что нужно. А как эти функции работают точнее по какому алгоритму они преобразовывают адреса? | |
|
|
|
|
|
|
|
для: Евгений Петров
(29.09.2005 в 14:33)
| | что проще по названию функции найти ее описание?
http://dev.mysql.com/doc/mysql/ru/miscellaneous-functions.html
INET_NTOA(expr)
По заданному числовому адресу сети (4 или 8 байтов) возвращает представление указанного адреса в виде разделенных точками четырех октетов в виде строки:
mysql> SELECT INET_NTOA(3520061480);
-> "209.207.224.40"
INET_ATON(expr)
По заданному представлению сетевого адреса в виде строки, содержащей разделенные точками четыре октета, функция возвращает целое число, представляющее собой числовое значение данного адреса. Адреса могут быть длиной 4 или 8 байтов:
mysql> SELECT INET_ATON("209.207.224.40");
-> 3520061480
Результирующее число всегда генерируется в соответствии с порядком расположения октетов в сетевом адресе, например вышеприведенное число вычисляется как 209*256^3 + 207*256^2 + 224*256 +40.
|
| |
|
|
|
|
|
|
|
для: P@Sol
(29.09.2005 в 14:43)
| | Да, только следует помнить, что под хранения IP-адреса в виде целого числа требуется поля типа BIGINT - а то можно отсечь половину диапазона, если использовать INT. | |
|
|
|
|
|
|
|
для: cheops
(29.09.2005 в 18:43)
| | Всем спасибо! Вообще мог сам догадаться как он вычмсляется, т.к. данный алгоритм довольно распространен. Но почему то не додумался. :) | |
|
|
|