我正在开发一个具有 IPv6 模型的 Rails 应用程序。我将 IPv6 地址存储在 2 个 32 位整数和一个 64 位整数中:
+-----------------------+---------------------+------+-----+---------+----------------+
| 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 会使用带符号的 bigint 进行所有算术运算,因此:
mysql> select 2 BETWEEN 0 AND 18446744073709551614;
+--------------------------------------+
| 2 BETWEEN 0 AND 18446744073709551614 |
+--------------------------------------+
| 0 |
+--------------------------------------+
有没有我可以做的工作,或者我需要通过 interface_identifier 拆分成 2 个无符号整数?
谢谢,唐纳德