2010-09-02 181 views
0

我正在開發一個具有IPv6模型的Rails應用程序。我存入兩個32位整數的IPv6地址和一個64位int:關於無符號bigint的MySQL BETWEEN

+-----------------------+---------------------+------+-----+---------+----------------+ 
| Field     | Type    | Null | Key | Default | Extra   | 
+-----------------------+---------------------+------+-----+---------+----------------+ 
| global_routing_prefix | int(11) unsigned | YES |  | NULL |    | 
| subnet_identifier  | int(11) unsigned | YES |  | NULL |    | 
| interface_identifier | bigint(20) unsigned | YES |  | NULL |    | 

不幸的是,當我去找到IP地址範圍,MySQL不會把所有的算術與簽署bigints,所以:

mysql> select 2 BETWEEN 0 AND 18446744073709551614; 
+--------------------------------------+ 
| 2 BETWEEN 0 AND 18446744073709551614 | 
+--------------------------------------+ 
|         0 | 
+--------------------------------------+ 

有沒有我可以做的工作,還是我需要通過interface_identifier分成2個unsigned int?

感謝, 唐納德

回答

1

又未使用BETWEEN似乎工作

mysql> select 0 <= 2 and 2 <= 18446744073709551614; 
+--------------------------------------+ 
| 0 <= 2 and 2 <= 18446744073709551614 | 
+--------------------------------------+ 
|         1 | 
+--------------------------------------+ 
2

醜陋的解決方案:

select 2 BETWEEN 0 AND CAST(18446744073709551614 AS DECIMAL); 

人MontyAB是在本地IPv6列類型工作MariaDB的/ MySQL的。如果你能支持他們,我們很可能會更快地擁有這個功能。 ;)