我必须将 IP 地址存储到在 32 位系统上运行的 MySQL 表中。
在 64 位系统上,我会简单地使用INT(10) UNSIGNED
,因为ip2long
它始终是一个绝对值。
如何让它在 32 位上工作?我有两个选择。
- 删除
UNSIGNED
并存储负值,但我不确定一旦完成此操作是否仍有可能值太大或太小(因为上限将减少一半以允许下限为负) - 使用
sprintf("%u",ip2long( $ip ))
结帐这篇文章(可能会比 1 慢。)
还有其他解决方案吗?
您可以尝试使用 INET_ATON 函数https://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_inet-aton在 SQL 插入查询中而不是 PHP 中转换 IP 。您需要使用 INT UNSIGNED 作为列类型。