在 MySQL 中高效儲存 IPv6 位址可能是一個挑戰。兩種常用的方法包括使用兩個 BIGINT 欄位或一個 DECIMAL(39,0) 欄位。
DECIMAL(39,0) 的優點和缺點
使用DECIMAL( 39,0) 比2*BIGINT 有幾個優點:
從二進位到十進位的轉換以及反之亦然
要將inet_pton() 傳回的二進位格式轉換為MySQL 可使用的十進位字串格式,您可以使用以下PHP函數:<code class="php">function binaryToDecimal($binary) { $hex = bin2hex($binary); return gmp_strval(gmp_init($hex, 16), 10); }</code>要將十進製字符串轉換回二進制,請使用以下函數:
<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中文網其他相關文章!