符号なしのBIGINTにBETWEENのMySQL
質問
私はIPv6のモデルを持っているレールのアプリに取り組んでいます。私は2の32ビットint型でIPv6アドレスと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は、署名bigintsですべての算術演算を行いますのでます:
mysql> select 2 BETWEEN 0 AND 18446744073709551614;
+--------------------------------------+
| 2 BETWEEN 0 AND 18446744073709551614 |
+--------------------------------------+
| 0 |
+--------------------------------------+
私が行うことができます周りの仕事があり、または私は
?2つの符号なし整数型にinterface_identifierで分割する必要がありますかおかげで、 ドナルド
解決
BETWEEN
を使用せずにそれをやって
mysql> select 0 <= 2 and 2 <= 18446744073709551614;
+--------------------------------------+
| 0 <= 2 and 2 <= 18446744073709551614 |
+--------------------------------------+
| 1 |
+--------------------------------------+
他のヒント
醜いソリューション:
select 2 BETWEEN 0 AND CAST(18446744073709551614 AS DECIMAL);
MontyABの人々は、MariaDB / MySQLのネイティブIPv6列タイプに取り組んでいます。あなたがそれらをサポートすることができれば、我々はすぐにこの機能を持っている可能性が高いです。 ;)
所属していません StackOverflow