【发布时间】:2020-02-17 01:56:40
【问题描述】:
我在 MySQL 中有一个表,其中有一列包含 ip 地址 - 存储为“VARCHAR(40)”。 ipv4 和 ipv6 地址都被使用了。
现在我想对这些地址进行排序,但我希望所有 ipv4 地址都排在所有 ipv6 地址之前。 我试过了:
ORDER BY INET6_ATON(IpAddress) 其中IpAddress 是列的名称。 INET6_ATON 返回一个 'VARBINARY(16)'。
排序会得到如下结果:
35.229.251.134
2405:204:900e:e66c::1441:48a1
37.9.113.28
其中 ipv4 和 ipv6 混合使用。这当然是因为 24(十六进制)是 36(十进制),介于 35 和 37 之间。
如何对 ip 地址进行排序,所以 ipv4 总是排在 ipv6 之前?
编辑:
我正在考虑使用“INET6_ATON”将列更改为“VARBINARY(16)”来存储值。这是否提供了更多可能性?
【问题讨论】:
标签: mysql sql sql-order-by ip-address