Die effiziente Speicherung von IPv6-Adressen in MySQL kann eine Herausforderung sein. Zwei häufig verwendete Methoden umfassen die Verwendung von zwei BIGINT-Feldern oder eines DECIMAL(39,0)-Felds.
Vor- und Nachteile von DECIMAL(39,0)
Verwendung von DECIMAL( 39,0) gegenüber 2*BIGINT bietet mehrere Vorteile:
DECIMAL(39,0) hat jedoch auch einige Nachteile:
Konvertierung vom Binärformat ins Dezimalformat und umgekehrt
Um das von inet_pton() zurückgegebene Binärformat in ein von MySQL verwendbares Dezimalzeichenfolgenformat zu konvertieren, können Sie das folgende PHP verwenden Funktion:
<code class="php">function binaryToDecimal($binary) { $hex = bin2hex($binary); return gmp_strval(gmp_init($hex, 16), 10); }</code>
Um von einer Dezimalzeichenfolge in eine Binärzeichenfolge zurückzukonvertieren, verwenden Sie die folgende Funktion:
<code class="php">function decimalToBinary($decimal) { $hex = gmp_strval(gmp_init($decimal), 16); return hex2bin($hex); }</code>
Speicher für IPv6-Adressen optimieren
Anstelle der Verwendung von DECIMAL(39,0) besteht eine effizientere Option darin, eine VARBINARY(16)-Spalte zu verwenden und die Funktionen inet_pton() und inet_ntop() für die Konvertierung zu nutzen. Dieser Ansatz wird in MySQL 5.6 und höher unterstützt und bietet sowohl Kompaktheits- als auch Leistungsvorteile.
Das obige ist der detaillierte Inhalt vonWie speichert man IPv6-Adressen effizient in MySQL: DECIMAL(39,0) vs. VARBINARY(16)?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!