IP地址 - MySQL数据类型

时间:2017-01-02 18:36:40

标签: mysql

我有一个包含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

这是数据类型问题吗?如果是这样,我应该使用什么数据类型?

2 个答案:

答案 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)。

相关问题 -