我想将$_SERVER["REMOTE_ADDR"]PHP中返回的数据存储到数据库字段中,这非常简单.问题是我无法找到有关IPv6地址的文本表示的最大长度的任何适当信息,这是网络服务器提供的$_SERVER["REMOTE_ADDR"].
我对将文本表示转换为地址通常编码的128位不感兴趣,我只想知道存储返回的任何IPv6地址需要多少个字符$_SERVER["REMOTE_ADDR"].
我正在更改一些表以将IP地址存储为数字而不是字符串.这对于IPv4来说很简单,其中32位地址可以适合整数列.但是,IPv6地址是128位.
的MySQL文档仅示出了数字类型多达64个比特("BIGINT").
我应该坚持使用char/varchar进行IPv6吗?(理想情况下,我想对IPv4和IPv6使用相同的列,所以我不想这样做).
有没有比使用两个bigint列更好的东西?每当使用地址时,我宁愿不必将值分解为上限和下限/ 64.
我正在使用MariaDB 5.1 - 如果在更高版本的MySQL中有更好的解决方案,那么很高兴知道,虽然没有立即帮助.
[编辑]请注意,我建议采用最佳方式执行此操作 - 很明显,有多种方法可以做到这一点(包括现有的字符串表示),但是(在性能方面)最好?(即如果某人已经完成了分析,这将使我无法做到这一点,或者如果我遗漏了一些明显的东西,那么知道也很好).
我通过保存$_SERVER['REMOTE_ADDR']MySQL数据库中的值来保存用户的IP地址.问题是Firefox和Chrome $_SERVER['REMOTE_ADDR']都是::1(这意味着IPv6中的 localhost ),IE和Opera是127.0.0.1(IPv4).
所以,我的问题是
IP版本是否依赖于浏览器?(我以前认为它取决于计算机)
我应该在数据库中创建两个字段,一个用于IPv4地址,一个用于IPv6地址?
我应该将所有IP统一到IPv6吗?我怎样才能在PHP中实现这一点(如果可能的话)?