PHP操作IP地址在mysql中的存储方式
来源:互联网 发布:mac系统壁纸存放路径 编辑:程序博客网 时间:2024/05/22 08:21
PHP
echo ip2long('192.168.1.38');
输出:3232235814
MYSQL
SELECT INET_ATON('192.168.1.38');
输出:3232235814
两个函数返回的结果是一样的,都是A*256*256*256+B*256*256+C*256+D的算法
192*256*256*256+168*256*256+1*256+38 = 3 232 235 814
反过来,从int转换为IP地址分别是php的long2ip()和mysql的INET_ATON()。
mysql存储这个值是字段需要用int UNSIGNED。不用UNSIGNED的话,128以上的IP段就存储不了了。
传统的方法,创建varchar(15),需要占用15个字节,而改时使用int只需要4字节,可以省一些字节。
php存入时:$ip = ip2long($ip);
mysql取出时:SELECT INET_ATON(ip) FROM table ...
php取出时,多一步:$ip = long2ip($ip);
转换以前的数据:
1.把以前的varchar()数据转换为int型的SQL语句:
UPDATE `hx_table` SET ip = INET_ATON(ip) WHERE INET_ATON(ip) is NOT NULL
2.把字段更改为int型:
ALTER TABLE `hx_table` CHANGE `ip` `ip` INT UNSIGNED NOT NULL
3.程序做相应修改上传,完成。
@@UPDATE@@20110310:
在32位的机子上,echo ip2long('192.168.1.38');由于超过32位的最大数,导致输出负数-1062731482。
有两种方法更新为正数:
$ip_long = bindec(decbin(ip2long($ip)));
或
$ip_long = = sprintf("%u", ip2long($ip));
因此一种是修改PHP程序,使其肯定存入正数。
另一种是将mysql的这个字段使用int,非UNSIGNED,使其可以存入负数。
echo ip2long('192.168.1.38');
输出:3232235814
MYSQL
SELECT INET_ATON('192.168.1.38');
输出:3232235814
两个函数返回的结果是一样的,都是A*256*256*256+B*256*256+C*256+D的算法
192*256*256*256+168*256*256+1*256+38 = 3 232 235 814
反过来,从int转换为IP地址分别是php的long2ip()和mysql的INET_ATON()。
mysql存储这个值是字段需要用int UNSIGNED。不用UNSIGNED的话,128以上的IP段就存储不了了。
传统的方法,创建varchar(15),需要占用15个字节,而改时使用int只需要4字节,可以省一些字节。
php存入时:$ip = ip2long($ip);
mysql取出时:SELECT INET_ATON(ip) FROM table ...
php取出时,多一步:$ip = long2ip($ip);
转换以前的数据:
1.把以前的varchar()数据转换为int型的SQL语句:
UPDATE `hx_table` SET ip = INET_ATON(ip) WHERE INET_ATON(ip) is NOT NULL
2.把字段更改为int型:
ALTER TABLE `hx_table` CHANGE `ip` `ip` INT UNSIGNED NOT NULL
3.程序做相应修改上传,完成。
@@UPDATE@@20110310:
在32位的机子上,echo ip2long('192.168.1.38');由于超过32位的最大数,导致输出负数-1062731482。
有两种方法更新为正数:
$ip_long = bindec(decbin(ip2long($ip)));
或
$ip_long = = sprintf("%u", ip2long($ip));
因此一种是修改PHP程序,使其肯定存入正数。
另一种是将mysql的这个字段使用int,非UNSIGNED,使其可以存入负数。
- PHP操作IP地址在mysql中的存储方式
- PHP操作IP地址在mysql中的存储方式
- IP地址在数据库中的存储方式
- 在mysql中存储ip地址
- IP地址在数据库里面的存储方式
- php变量在内核中的存储方式
- PHP变量在内核中的存储方式
- MySQL怎样存储IP地址
- MySQL怎样存储IP地址
- MySQL优化存储IP地址
- MySQL怎样存储IP地址
- mysql中存储ip地址
- IP地址在mysql的存储(IP地址和int的转换)
- php二分法在IP地址查询中的应用
- php mysql ip地址转换
- 如何在MySQL中的获取IP地址的网段
- PHP变量在zend内核中的存储方式
- php 操作 MySQL 中的Blob类型 存储图片
- 黑马程序员_对交通灯管理系统的理解
- 关于Family-oriented Abstraction ,Specification,Translation Process方法的小总结
- Android 开发之广播事件大全
- ADOTALBE对象被打开
- 写在2011
- PHP操作IP地址在mysql中的存储方式
- 虚拟机linux环境的搭建
- What are Double Buffering, vsync and Triple Buffering?
- 读书时间2011/12/26 iPhone/iPad
- asp.net抓取天气预报保存数据库
- rhel4 x86_64 php5.2.17 make安装 支持mysqli
- 1438. Shopaholic
- STL--stack/queue的使用方法
- C# DataTable的详细用法