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.程序作相應修改上傳,完成。php