我可以将IP地址存储为整数吗?

Joe*_*ano 3 ruby ip integer ruby-on-rails

我记录了用户的IP地址.由于IP地址包含句点,我将它们存储为字符串.但我想通过尝试将它们保存为整数来尝试节省我的服务器空间.

我考虑过这样做:

@user_ip = request.remote_ip.delete(".").to_i
Run Code Online (Sandbox Code Playgroud)

例如,将"127.0.0.1"转换为127001.

但是我担心在这种方法下可以将两个不同的IP地址保存为相同的整数.

那可能吗?如果是这样,有没有更好的方法将IP地址保存为整数?

Cas*_*per 8

执行这些转换(使用C语言)的标准方法称为inet_aton(ascii to number)和inet_ntoa(number to ascii).Ruby等效方法包含在IPAddr:

require 'ipaddr'

IPAddr.new("192.168.0.1").to_i
 => 3232235521 

IPAddr.new(3232235521, Socket::AF_INET).to_s
 => "192.168.0.1" 
Run Code Online (Sandbox Code Playgroud)

但是,正如其他人在这里指出的那样,查询数据库中的数字表示并不总是切实可行的.但是MySQL例如允许您inet_ntoa/aton直接在查询中使用这些函数:http:
//dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html

如果您想要开始使用netmasks过滤和查询IP地址,这非常有用.有关如何设置以及如何以这种方式运行查询的更多示例,请参见此处:http:
//www.finnie.org/2007/12/05/mysql-and-cidr-selection/