MySQL ZWISCHEN auf unsigned Bigint
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
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