Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menyimpan Alamat IPv6 dengan Cekap dalam MySQL: DECIMAL(39,0) vs. VARBINARY(16)?
Menyimpan alamat IPv6 dengan cekap dalam MySQL boleh menjadi satu cabaran. Dua kaedah yang biasa digunakan termasuk menggunakan dua medan BIGINT atau medan PERPULUHAN(39,0).
Kebaikan dan Kelemahan PERPULUHAN(39,0)
Menggunakan PERPULUHAN( 39,0) lebih 2*BIGINT menawarkan beberapa kelebihan:
Walau bagaimanapun, DECIMAL(39,0) juga mempunyai beberapa kelemahan:
Penukaran daripada Binari kepada Perpuluhan dan Sebaliknya
Untuk menukar daripada format binari seperti yang dikembalikan oleh inet_pton() kepada format rentetan perpuluhan yang boleh digunakan oleh MySQL, anda boleh menggunakan PHP berikut fungsi:
<code class="php">function binaryToDecimal($binary) { $hex = bin2hex($binary); return gmp_strval(gmp_init($hex, 16), 10); }</code>
Untuk menukar kembali daripada rentetan perpuluhan kepada binari, gunakan fungsi berikut:
<code class="php">function decimalToBinary($decimal) { $hex = gmp_strval(gmp_init($decimal), 16); return hex2bin($hex); }</code>
Mengoptimumkan Storan untuk Alamat IPv6
Daripada menggunakan DECIMAL(39,0), pilihan yang lebih cekap ialah menggunakan lajur VARBINARY(16) dan memanfaatkan fungsi inet_pton() dan inet_ntop() untuk penukaran. Pendekatan ini disokong dalam MySQL 5.6 dan lebih baru dan memberikan kedua-dua kekompakan dan faedah prestasi.
Atas ialah kandungan terperinci Bagaimana untuk Menyimpan Alamat IPv6 dengan Cekap dalam MySQL: DECIMAL(39,0) vs. VARBINARY(16)?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!