MySQL で IPv6 アドレスを効率的に保存するのは難しい場合があります。一般的に使用される 2 つの方法には、2 つの BIGINT フィールドまたは DECIMAL(39,0) フィールドの使用が含まれます。
DECIMAL(39,0) の利点と欠点
DECIMAL( 2*BIGINT よりも 39,0) には、いくつかの利点があります。
ただし、DECIMAL(39,0) にはいくつかの欠点もあります。
バイナリから 10 進数への変換、およびその逆
inet_pton() によって返されたバイナリ形式から MySQL で使用できる 10 進数の文字列形式に変換するには、次の PHP を使用できます。 function:
<code class="php">function binaryToDecimal($binary) { $hex = bin2hex($binary); return gmp_strval(gmp_init($hex, 16), 10); }</code>
10 進数文字列からバイナリ文字列に逆変換するには、次の関数を使用します:
<code class="php">function decimalToBinary($decimal) { $hex = gmp_strval(gmp_init($decimal), 16); return hex2bin($hex); }</code>
IPv6 アドレスのストレージの最適化
DECIMAL(39,0) を使用する代わりに、より効率的なオプションは、VARBINARY(16) 列を使用し、inet_pton() 関数と inet_ntop() 関数を変換に利用することです。このアプローチは MySQL 5.6 以降でサポートされており、コンパクトさとパフォーマンスの両方の利点を提供します。
以上がMySQL に IPv6 アドレスを効率的に保存する方法: DECIMAL(39,0) と VARBINARY(16)?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。