J'ai besoin de stocker l'adresse IP de la manière la plus compacte possible, la recherche n'est pas un problème. Cela doit également être compatible sur Windows, Linux et Mac en utilisant n'importe quel DB (MySQL, SQLite, Postgres, etc).Comment stockez-vous une adresse IP (v4 ou v6) en tant qu'int dans une base de données en utilisant php?
Grâce aux fonctions ip2long() et long2ip() de PHP, je peux convertir une adresse IP4 en un petit champ int plutôt qu'en un varchar (15) ou autre. Le problème est que nous sommes dans une phase de transition vers IP6, ce qui signifie que la plupart des meilleures pratiques existantes échouent - y compris celles qui ne fonctionnent pas avec IP6. De plus, les fonctions spécifiques à DB comme INET_ATON() et INET_NTOA() ne sont pas des options ici.
Alors, comment pouvez-vous stocker l'adresse IP comme INT (ou tout autre format compact) d'une manière qui fonctionnera sur n'importe quel système? Wrang-wrang point fait référence à l'utilisation de inet_ntop() et de inet_ptop() pour emballer et décompacter IP4 ou IP6. Le problème est qu'ils ne fonctionnent que sur Linux/Mac avec PHP +5.1 (ce qui n'est pas un gros problème) et sur Windows avec +5.3 (qui est).
Si ce n'était pas un problème sont leurs remplacements pour le champ varbinary (16) qui a été recommandé dans chaque base de données?
Vous voudrez peut-être jeter un coup d'œil à [ce thread SO] (http://stackoverflow.com/questions/420680/how-to-store-ipv6-compatible-address-in-a-relational-database). L'affiche s'est contentée d'utiliser deux champs 'BIGINT' pour stocker une adresse IPv6, mais il y a aussi d'autres suggestions que vous pourriez vouloir considérer. – zombat