MySQL МЕЖДУ неподписанным bigint

0

Я работаю над приложением 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?

Спасибо, Дональд

Теги:
bigint
ipv6

2 ответа

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. Если вы можете их поддержать, скорее всего, у нас будет эта функция раньше.;)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню