Maison > Article > base de données > Comment stocker efficacement les adresses IPv6 dans MySQL : DECIMAL(39,0) vs VARBINARY(16) ?
Stocker efficacement les adresses IPv6 dans MySQL peut être un défi. Deux méthodes couramment utilisées incluent l'utilisation de deux champs BIGINT ou d'un champ DECIMAL(39,0).
Avantages et inconvénients de DECIMAL(39,0)
Utilisation de DECIMAL( 39,0) sur 2*BIGINT offre plusieurs avantages :
Cependant, DECIMAL(39,0) présente également certains inconvénients :
Conversion de binaire en décimal et vice versa
Pour convertir du format binaire renvoyé par inet_pton() vers un format de chaîne décimale utilisable par MySQL, vous pouvez utiliser le PHP suivant function :
<code class="php">function binaryToDecimal($binary) { $hex = bin2hex($binary); return gmp_strval(gmp_init($hex, 16), 10); }</code>
Pour reconvertir une chaîne décimale en binaire, utilisez la fonction suivante :
<code class="php">function decimalToBinary($decimal) { $hex = gmp_strval(gmp_init($decimal), 16); return hex2bin($hex); }</code>
Optimisation du stockage pour les adresses IPv6
Au lieu d'utiliser DECIMAL(39,0), une option plus efficace consiste à utiliser une colonne VARBINARY(16) et à exploiter les fonctions inet_pton() et inet_ntop() pour la conversion. Cette approche est prise en charge dans MySQL 5.6 et versions ultérieures et offre à la fois des avantages en termes de compacité et de performances.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!