我打算使用varchar(20)
,但我想知道如果我应该做INT而应该删除句点。什么会更好,为什么?
答案 0 :(得分:18)
我认为你只对IPv4地址感兴趣,而不是IPv6。
我会使用INT UNSIGNED
作为列,然后使用INET_ATON
和INET_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)
将IPV4存储为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
答案 2 :(得分:0)
如果您真的担心节省空间,可以将其打包成4字节的int。 IPv4 IP地址的每个块可以具有256个可能的值,恰好是单个字节的范围。
- 编辑 - >我刚才描述的内容可以通过他的回答链接的mysql函数f00来完成
但是,将其存储为字符串将节省一些编码时间。老实说,除非你大规模地这样做,否则从更密集的存储格式进行优化并不重要。