在 MySQL 中高效存储 IPv6 地址可能是一个挑战。两种常用的方法包括使用两个 BIGINT 字段或一个 DECIMAL(39,0) 字段。
DECIMAL(39,0) 的优点和缺点
使用 DECIMAL( 39,0) 比 2*BIGINT 有几个优点:
但是,DECIMAL(39,0) 也有一些缺点:
从二进制到十进制的转换以及反之亦然
要将 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中文网其他相关文章!