「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > MySQL に IPv6 アドレスを保存する最良の方法は何ですか?

MySQL に IPv6 アドレスを保存する最良の方法は何ですか?

2024 年 11 月 7 日に公開
ブラウズ:538

What is the Best Way to Store IPv6 Addresses in MySQL?

MySQL での IPv6 アドレスの保存: DECIMAL(39,0) と VARBINARY(16)

IPv6 の保存という課題に直面したときMySQL でアドレスを使用する場合、開発者は多くの場合、DECIMAL(39,0) と 2*BIGINT の 2 つのオプションを検討します。どちらにも利点がありますが、以前の両方の方法に比べて利点がある新しいソリューションが登場しました。

DECIMAL(39,0) と 2*BIGINT

]DECIMAL(39,0) の利点:

  • IPv4 アドレスと IPv6 アドレスの両方を処理します。
  • SQL 関数を使用して比較およびソートできます。
  • PHP 関数を使用して、バイナリ表現との変換が簡単です。

DECIMAL(39,0):

  • VARBINARY よりもスペース効率が低い(16).
  • インデックス作成のパフォーマンスが VARBINARY(16) よりも遅い。
  • 特定の IPv6 アドレスを保存するときにオーバーフローする可能性があります。

VARBINARY(16)

MySQL の最近のバージョンでは、VARBINARY(16) が IPv6 アドレスを格納するための推奨メソッドになっています。 DECIMAL(39,0) と 2*BIGINT の両方に比べて、いくつかの利点があります。

  • コンパクトな表現: VARBINARY(16) は、ちょうど 16 バイトを使用し、バイナリ形式の IPv6 アドレス。これにより、DECIMAL(39,0) や 2*BIGINT よりもスペース効率が高くなります。
  • 高速インデックス作成: MySQL のインデックス作成パフォーマンスは VARBINARY データ型に対して最適化されており、IPv6 の検索が高速になります。 DECIMAL(39,0) や 2*BIGINT 列のアドレスよりも VARBINARY 列のアドレスを使用します。
  • オーバーフローの問題なし: VARBINARY(16) は、オーバーフローを心配することなく、任意の IPv6 アドレスを格納できます。

変換関数

IPv6 アドレスの 2 進表現と 10 進表現の間で変換するには、次の PHP 関数を使用できます。

  • inet_pton() は、バイナリからドット 4 進表記 (IPv4) またはコロン 16 進表記 (IPv6) に変換します。
  • inet_ntop() は、ドット 4 進表記またはコロン 16 進表記からバイナリに変換します。

結論

MySQL に IPv6 アドレスを保存するには、スペース効率、高速なインデックス作成、およびオーバーフローの問題がないため、VARBINARY(16) が推奨されるソリューションとなっています。 DECIMAL(39,0) と 2*BIGINT はかつては一般的なメソッドでしたが、現在では VARBINARY(16) がパフォーマンスと機能の最適なバランスを提供します。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3