MySQL:存储 MAC 地址的最佳方式?
Posted
技术标签:
【中文标题】MySQL:存储 MAC 地址的最佳方式?【英文标题】:MySQL: Best way to store MAC addresses? 【发布时间】:2011-05-29 17:03:18 【问题描述】:在 mysql 数据库中存储 MAC 地址的最佳字段类型是什么?另外,是否应该使用特定的分隔符(冒号或破折号)存储,还是应该不使用分隔符存储?
【问题讨论】:
定义“最佳”。您打算如何处理这些数据? 用于库存系统。我想我的问题是“大多数人都做什么?”。 感谢您的所有回答!我会做一些实验。 【参考方案1】:使用 bigint unsigned (8 bytes) 那么你可以:
select hex(mac_addr) from log;
和
insert into log (mac_addr) values (x'000CF15698AD');
【讨论】:
所以您也可以放置 Infiniband GUID :-) 在本例中,hex() 函数将返回:CF15698AD,它不是 MAC 地址。当您运行 select hex(mac_addr) 时,输出并不总是像您期望的那样为 12 个字符。 @jon black MAC 地址,无论如何用于以太网设备。长度为六个字节。 unsigned INT(6) 应该工作吗?是否建议使用 unsigned BIGINT(8) 而不是 unsigned INT(6) 仅仅是为了支持 infiniband GUID?【参考方案2】:看看here。一般来说,CHAR(12) 很好,但细节取决于您的需要。或者直接使用内置 macaddr 类型的 PostgreSQL。
【讨论】:
我第一次看到提到 PostgreSQL macaddr 类型 小心:PostgreSQL macaddr 类型不支持 8 字节 MACs【参考方案3】:鉴于 MySQL 不支持用户定义的扩展,它似乎也不支持任意扩展或插件(仅用于存储引擎),最好的办法是将其存储为 CHAR(17) 作为标准符号的 ASCII 字符串(例如,使用冒号分隔符)或一个小的 BLOB 并直接存储字节。但是,对于大多数应用程序来说,字符串表示法会更加友好。
您可能希望将其与验证其是否为 MAC 地址的触发器配对,因为这实际上是在不支持自定义类型的情况下强制数据有效性的唯一方法。
【讨论】:
以上是关于MySQL:存储 MAC 地址的最佳方式?的主要内容,如果未能解决你的问题,请参考以下文章