What type should I store IP addresses for MySQL?

前端 未结 3 891
遇见更好的自我
遇见更好的自我 2020-12-03 15:34

I was going to use varchar(20), but I was wondering what should if I should do INT and strip off the periods instead. What would be better and why?

相关标签:
3条回答
  • 2020-12-03 15:43

    I presume you're only interested in IPv4 addresses, not IPv6.

    I would use an INT UNSIGNED for the column, and then use INET_ATON and INET_NTOA to convert back and forth between the textual representation and the int value.

    mysql> SELECT INET_ATON('192.168.10.50');
    +----------------------------+
    | INET_ATON('192.168.10.50') |
    +----------------------------+
    |                 3232238130 |
    +----------------------------+
    1 row in set (0.00 sec)
    
    mysql> SELECT INET_NTOA(3232238130);
    +-----------------------+
    | INET_NTOA(3232238130) |
    +-----------------------+
    | 192.168.10.50         |
    +-----------------------+
    1 row in set (0.00 sec)
    
    0 讨论(0)
  • 2020-12-03 15:54

    If you're really concerned about saving space, you can pack it into a 4-byte int. Each block of an IPv4 IP address can have 256 possible values, which just happens to be the range of a single byte.

    -- Edit --> What I just described can be done with the mysql functions f00 linked in his answer

    However, storing it as a string will save a bit of coding time. Honestly, unless you're doing this on a very large scale, the optimization from a denser storage format won't matter.

    0 讨论(0)
  • 2020-12-03 16:10

    store IPV4 as int unsigned

    http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_inet-aton

    http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_inet-ntoa

    0 讨论(0)
提交回复
热议问题