Как хранить IP-адрес в базе данных?

2

Как правильнее организовать хранение IP-адреса в базе данных? Первое, что приходит в голову — просто сохранять как текст. Слышал, что вместо этого можно конвертировать адрес в целое число. Как лучше сделать?

Лучший ответ:

1

Если вам нужно хранить ИП в MSSQL в поле int, то сделать это можно по формуле (где ип - A.B.C.D):

IP = A x (256*256*256) + B x (256*256) + C x 256 + D

В mysql для этого есть встроенные функции:

mysql> SELECT INET_ATON('192.168.0.10') AS ipn;
+------------+
| ipn        |
+------------+
| 3232235530 |
+------------+

mysql> SELECT INET_NTOA(3232235530) AS ipa;
+--------------+
| ipa          |
+--------------+
| 192.168.0.10 |
+--------------+
Senya_L

Одно поле INT - это, конечно, удобно. Но если потребуется вести сложный поиск по таблице, то имхо лучше будет 4 поля tinyint + одно вычисляемое поле

create table tbl(
............
IP1 tinyint, IP2 tinyint, IP3 tinyint, IP4 tinyint, 
FullIP as cast(IP1 as varchar(3)) 
         + '.' + cast(IP2 as varchar(3)) + ...
..............
)

Кстати, функции INET_NTOA, INET_ATON в 2008-м появились? У меня в 2005-м такого нет

lavrushin

INETNTOA, INETATON есть в mysql. Не путайте с MS SQL

v1.7.123.556
© 2009—2010 CodeHelper FAQ | О сайте | Обратная связь | История изменений | Статьи
Creative Commons LicenseМатериалы сайта распространяются под лицензией Creative Commons Attribution-Share Alike 3.0 Unported.