Com*_*eek 91 php mysql types ip-address
可能重复:
如何在mySQL中存储IP
我想获取IP地址$_SERVER['REMOTE_ADDR']和其他一些$_SERVER变量,哪种数据类型是正确的?
是VARCHAR(n)吗?
Gum*_*mbo 137
由于IPv4地址长度为4个字节,因此您可以使用恰好包含4个字节的INT(UNSIGNED):
`ipv4` INT UNSIGNED
Run Code Online (Sandbox Code Playgroud)
INSERT INTO `table` (`ipv4`) VALUES (INET_ATON("127.0.0.1"));
SELECT INET_NTOA(`ipv4`) FROM `table`;
Run Code Online (Sandbox Code Playgroud)
对于IPv6地址,您可以使用BINARY:
`ipv6` BINARY(16)
Run Code Online (Sandbox Code Playgroud)
并使用PHPinet_pton和inet_ntop转换:
'INSERT INTO `table` (`ipv6`) VALUES ("'.mysqli_real_escape_string(inet_pton('2001:4860:a005::68')).'")'
'SELECT `ipv6` FROM `table`'
$ipv6 = inet_pton($row['ipv6']);
Run Code Online (Sandbox Code Playgroud)
Pas*_*TIN 47
您有两种可能性(对于IPv4地址):
varchar(15),如果您想将IP地址存储为字符串
192.128.0.15 例如integer(4个字节),如果你的IP地址转换为整数
3229614095 对于我之前使用的IP
第二种解决方案将需要更少的数据库空间,并且可能是更好的选择,即使它在存储和检索数据(将其从/转换为字符串)时意味着一些操作.
关于这些操作,请参阅PHP端和MySQL端的ip2long()和long2ip()函数.inet_aton()inet_ntoa()
对于IPv4地址,您可以使用VARCHAR将它们存储为字符串,但也可以将它们存储为长整数INT(11) UNSIGNED.您可以使用MySQL的INET_ATON() 函数将它们转换为整数表示.这样做的好处是它允许您对它们进行简单的比较,例如BETWEEN查询
| 归档时间: |
|
| 查看次数: |
100957 次 |
| 最近记录: |