Frage

Ich arbeite an einer Rails-Anwendung, die ein IPv6-Modell hat. Ich bin die IPv6-Adresse in zwei 32-Bit-Ints Speicherung und ein 64-Bit-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    |                | 

Leider, wenn ich gehe IPs in einem Bereich zu finden, MySQL hat alle Arithmetik mit unterzeichnet bigints, so:

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

Gibt es eine Arbeit um das ich tun kann, oder muss ich durch interface_identifier in 2 unsigned ints aufzuspalten?

Danke, Donald

War es hilfreich?

Lösung

tun es ohne BETWEEN mit scheint Arbeit

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

Andere Tipps

hässliche Lösung:

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

In der MontyAB arbeitet an nativen IPv6-Spaltentyp für MariaDB / MySQL. Wenn Sie sie unterstützen können, sind wir wahrscheinlich diese Funktion früher haben. ;)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top