MySQL:存储MAC地址的最佳方法是什么?

17

在MySQL数据库中存储MAC地址,最好使用哪种字段类型?此外,它应该以特定的分隔符(冒号或破折号)存储还是不带分隔符存储?

使用BINARY(6)字段类型来存储MAC地址是最佳实践,因为MAC地址通常由六个字节组成。可以使用任何分隔符存储MAC地址,但不建议使用分隔符,因为这样可能会导致一些查询和比较操作变得更加困难。

定义“最佳”。您打算如何处理这些数据? - David O'Meara
这是一个库存系统。我想我的问题是“大多数人做什么?” - Nick
感谢所有的回答!我会进行一些实验。 - Nick
3个回答

32

使用 bigint unsigned(8 个字节),您就可以:

select hex(mac_addr) from log;
并且
insert into log (mac_addr) values (x'000CF15698AD');

所以您也可以放置Infiniband GUIDs :-) - Andre Holzner
1
在这个例子中,hex()函数将返回:CF15698AD,这不是一个MAC地址。当你运行__select hex(mac_addr)__时,输出并不总是像你期望的那样有12个字符。 - Mathieu Châteauvert
@jon black MAC地址,至少对于以太网设备而言,长度为六个字节。无符号INT(6)是否可行?建议使用无符号BIGINT(8)仅是为了支持Infiniband GUIDs吗? - Billy left SE for Codidact

2

请看这里。通常情况下,CHAR(12)是不错的选择,但具体取决于您的需求。或者您可以使用PostgreSQL,它有一个内置的macaddr类型。


2
第一次听说PostgreSQL的macaddr类型。 - David Poxon
注意:PostgreSQL的macaddr类型不支持8字节的MAC地址。 - Tilo
PostgreSQL自版本10开始支持8字节MAC类型macaddr8。https://www.postgresql.org/docs/current/datatype-net-types.html#DATATYPE-MACADDR8 - jcamdr

1

鉴于MySQL不支持用户定义扩展,也似乎不支持任意扩展或插件(仅限于存储引擎),您最好将其存储为CHAR(17)作为标准符号的ASCII字符串(例如,使用冒号分隔符),或者是一个小型BLOB并直接存储字节。然而,对于大多数应用程序来说,字符串表示法更加友好。

您可能希望将其与验证它是否为MAC地址的触发器配对,因为这实际上是在不支持自定义类型的情况下强制执行数据有效性的唯一方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接