我有一个包含Country-IP地址的数据库。
我的桌子有两个字段。
LBound, tinyint
UBound, tinyint
当我像这样查询表格时:
select * from allowed where '129.250.224.1' BETWEEN lbound AND ubound
我得到3个结果:
12.205.104.0 13.16.137.9
129.250.2.43 129.250.3.137
129.250.16.47 129.253.255.255
但我只想回来:
129.250.16.47 129.253.255.255
这是数据类型问题吗?如果是这样,我应该使用什么数据类型?
答案 0 :(得分:1)
您可以使用
http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html
INETT_ATON
和
INET_NTOA
例如:
SELECT INET_ATON('10.0.5.9');
-> 167773449
通过这种方式,您可以正确转换数字中的IP并正确过滤
答案 1 :(得分:0)
您可以使用inet_aton
功能将IP地址文本转换为数值并进行比较。像这样:
SELECT *
FROM allowed
WHERE inet_aton('129.250.224.1') BETWEEN inet_aton(lbound) AND inet_aton(ubound);
关于用于存储IP地址的类型,我使用UNSIGNED INT或VARBINARY(16)。
相关问题 -