在数据库中以整数形式存储IP地址

3
我在数据库中将IP地址存储为整数,使用 ip2long(),列类型为无符号整数。但是对于某些IP,它保存为0。我进行了测试,发现对于一些IP,ip2long函数返回负整数,当我将其插入到数据库中时,它会保存为0。我搜索了一下,每个人都说该列必须是无符号整数。
例如:ip2long("212.36.25.15"); 将返回 -735831793,并且在数据库中将保存为 0

2
你需要将数据库列的类型从“integer”更改为“unsigned int”。 - aashnisshah
列是无符号整数,但对于某些IP地址,它保存为0。 - Gia Nebieridze
这个链接可能对你有用:http://stackoverflow.com/questions/11210713/ip-addresses-get-stored-as-0-when-converting-with-php-ip2long-function - JackGroves
2
为什么要这样转换呢?使用VARCHAR列是更好的选择,因为它可以存储IPv4和IPv6地址。你的数字解决方案只支持IPv4,这会在以后导致问题。IPv4地址是一个无符号32位值,但除非你要存储数十亿个地址,否则最好使用字符串。这样更安全、更灵活。 - tadman
Postgres自9.1版本开始拥有特殊的网络地址类型:cidr和inet。它们非常优秀。 - alfthan
2个回答

4

使用 INET_ATON 插入 IP 地址。
例如:INET_ATON('127.0.0.1');
使用 INET_NTOA 获取 IP 地址。
例如:SELECT INET_NTOA('2130706433');


是的,我用 MySQL 函数进行了测试,它可以正常工作。 - Gia Nebieridze

3
您可以使用MySQL函数INET_ATON代替。

是的,我使用了MySQL函数进行测试,它可以正常工作。 - Gia Nebieridze

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接