Я работаю над приложением rails, которое имеет модель IPv6. Я сохраняю адрес IPv6 в 2 32-битных int и 64-битных int:
+-----------------------+---------------------+------+-----+---------+----------------+
| 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 выполняет все арифметические действия с подписанными значками, поэтому:
mysql> select 2 BETWEEN 0 AND 18446744073709551614;
+--------------------------------------+
| 2 BETWEEN 0 AND 18446744073709551614 |
+--------------------------------------+
| 0 |
+--------------------------------------+
Есть ли работа, которую я могу сделать, или мне нужно разделить на interface_identifier на 2 неподписанных ints?
Спасибо, Дональд
Выполнение этого без использования BETWEEN
похоже работает
mysql> select 0 <= 2 and 2 <= 18446744073709551614;
+--------------------------------------+
| 0 <= 2 and 2 <= 18446744073709551614 |
+--------------------------------------+
| 1 |
+--------------------------------------+
Уродливое решение:
select 2 BETWEEN 0 AND CAST(18446744073709551614 AS DECIMAL);
Люди в MontyAB работают над собственным типом столбца IPv6 для MariaDB/MySQL. Если вы можете их поддержать, скорее всего, у нас будет эта функция раньше.;)