在SQL Server数据库表中存储MAC地址,应该使用什么数据类型?

10

我想在我的数据库表中存储MAC地址,应该使用什么数据类型?在谷歌上阅读文章时,我看到了几次提到二进制(8)。这是正确的方法吗?

此外,这对我来说没有意义,因为MAC地址是六组两个十六进制数字,难道不应该使用Binary(6)吗?

3个回答

9
我不会使用Binary
我会使用CHAR(12)
当然,这取决于您如何使用数据——如果只是用于显示,可以直接使用文本表示。

为什么?有什么好处?这个表将有大约100万个MAC地址条目。我将向那些缺少MAC地址并已经部署在现场的设备分配MAC地址。 - Mausimo
1
@Mausimo - 嗯,拥有它们的目的是什么?仅用于显示吗?在二进制中拥有它们的好处是什么? - Oded
我不确定好处是什么。我需要填充一个表格,其中包含我们的MAC地址块,并在设备连接到应用程序时将它们分配给它们。我在一些帖子中看到了Binary(8)的提及,所以我觉得那是一个很好的起点。 - Mausimo
我只需要将一个MAC地址与一个对象关联起来,然后获取下一个可用的MAC地址并将其与下一个对象关联起来。感谢您的建议 :) - Mausimo
2
@mausimo,我请求你请听Oded的建议。即使在5M行数据中将它们存储为二进制,也只能节省20MB的磁盘空间。因此,为了权衡,您会得到更复杂的查询和更少的查询性能,当尝试查找下一个可租赁的时。不要为了小事而牺牲大事。 - Mike Perrenoud
显示剩余3条评论

5

为了更方便地执行二进制操作,您可以将它们存储到Binary(6)中。您可以使用以下内置函数查看二进制数据的十六进制可读值:

select top 10 master.sys.fn_varbintohexstr(mac) from macaddresses

同时将十六进制文本转换为二进制:

select CONVERT(binary(6), 'AABBCCDDEEFF', 2);

1

MAC地址是由6个十六进制数字组成的序列。因此,将其存储为数字会更有效。使用BIGINT。


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