我应该为MySQL存储什么类型的IP地址?

时间:2011-01-04 02:32:46

标签: mysql

我打算使用varchar(20),但我想知道如果我应该做INT而应该删除句点。什么会更好,为什么?

3 个答案:

答案 0 :(得分:18)

我认为你只对IPv4地址感兴趣,而不是IPv6。

我会使用INT UNSIGNED作为列,然后使用INET_ATONINET_NTOA在文本表示和int值之间来回转换。

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)

答案 1 :(得分:3)

答案 2 :(得分:0)

如果您真的担心节省空间,可以将其打包成4字节的int。 IPv4 IP地址的每个块可以具有256个可能的值,恰好是单个字节的范围。

- 编辑 - >我刚才描述的内容可以通过他的回答链接的mysql函数f00来完成

但是,将其存储为字符串将节省一些编码时间。老实说,除非你大规模地这样做,否则从更密集的存储格式进行优化并不重要。