将哪种MySQL数据类型用于IP地址?
2022-08-30 07:37:27
由于 IPv4 地址的长度为 4 个字节,因此可以使用正好包含 4 个字节的 INT
(无符号
):
`ipv4` INT UNSIGNED
INSERT INTO `table` (`ipv4`) VALUES (INET_ATON("127.0.0.1"));
SELECT INET_NTOA(`ipv4`) FROM `table`;
对于 IPv6 地址,您可以改用二进制
文件:
`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']);
您有两种可能性(对于 IPv4 地址):
varchar(15),
如果你想将 IP 地址存储为字符串192.128.0.15
例如一个整数
(4 个字节),如果将 IP 地址转换为整数3229614095
对于我之前使用的 IP
第二种解决方案在数据库中需要更少的空间,并且可能是一个更好的选择,即使它意味着在存储和检索数据时进行一些操作(将其从/转换为字符串)。
关于这些操作,请参阅PHP端的ip2long()
和long2ip()
函数,或MySQL端的inet_aton()
和inet_ntoa()。