由于IPv4地址长度为4字节,因此可以使用恰好为4字节的INT
(UNSIGNED
):
`ipv4` INT UNSIGNED
INSERT INTO `table` (`ipv4`) VALUES (INET_ATON("127.0.0.1"));
SELECT INET_NTOA(`ipv4`) FROM `table`;
对于IPv6地址,您可以使用BINARY
代替:
`ipv6` BINARY(16)
使用PHP的inet_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']);
varchar(15)
,如果你想将IP地址存储为字符串
- 例如:192.128.0.15
2. 使用integer
(4字节),如果你将IP地址转换为整数
- 例如:3229614095
,这是我之前使用的IP地址
BINARY(128)
可用于存储 IPv6 地址。 - Ether对于IPv4地址,您可以使用VARCHAR将它们存储为字符串,但也可以考虑将它们存储为长整数 INT(11) UNSIGNED
。 您可以使用MySQL的INET_ATON()
函数将它们转换为整数表示形式。 这样做的好处是可以轻松地进行比较,例如BETWEEN
查询。