質問

私は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列タイプに取り組んでいます。あなたがそれらをサポートすることができれば、我々はすぐにこの機能を持っている可能性が高いです。 ;)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top