对于 IPv4 地址。人们经常使用VARCHAR(15)列去存储IP地址。然而,它们实际上是32位无符号整数,不是字符串。用小数点将地址分成4段的表示方法只是为了让人们阅读容易。所以应该用无符号整数存储IP地址。MySQL 提供了 INET_ATON() 和 INET_NTOA() 函数在这两种表示方法之间转换。MySQL 5.6 版本之后,也有了解释 IPv6 地址的方法,就是INET6_ATON() 和 INET6_NTOA() 函数
INET_ATON(IP) 函数——把ip转为无符号整型(4-8位)
假如需要在表中查出IP 在 192.168.1.13 到 192.168.1.23之间的 IP 地址
SELECT * FROM ip_table WHERE INET_ATON(ip) > INET_ATON('192.168.1.13') AND INET_ATON(ip) < INET_ATON('192.168.1.23');
INET_NTOA函数——把整型的ip转为字符串式的地址
插入数据前,先用inet_aton把ip地址转为整型,显示数据时,使用inet_ntoa把整型的ip地址转为字符串格式的地址显示即可。
INSERT INTO `ip_table`(`id`,`ip`) VALUES (1,inet_aton('192.168.1.1')), (2,inet_aton('192.168.1.2')), (3,inet_aton('192.168.1.3')), (4,inet_aton('192.168.1.4')), (5,inet_aton('192.168.1.5'));
现在插入到数据库的数据如下:
接着转换成我们熟悉的 IP 地址
SELECT id,INET_NTOA(ip) AS ip FROM ip_table ;
最新评论: