sanjihan Asked: 2022-04-13 13:40:26 +0800 CST2022-04-13 13:40:26 +0800 CST 2022-04-13 13:40:26 +0800 CST 按长度过滤 varbinary 字段 772 我正在使用VARBINARY(16)数据类型存储 ips。我想只选择 ipv4 ips。是否可以按VARBINARY(或VARCHAR)中使用的长度过滤列?像这样的东西 SELECT INET6_NTOA(`ip`) from TABLE where BYTESLENGHT(`ip`) = 4 mysql mariadb 2 个回答 Voted Best Answer Rick James 2022-04-13T15:36:19+08:002022-04-13T15:36:19+08:00 如果ip_n是“数字”版本,那么 LENGTH(ip_n) IPv6 为 16,而 IPv4 则更小。 mysql> SELECT LENGTH(INET_ATON('11.22.33.44')) AS v4, LENGTH(INET6_ATON('f::f')) AS v6; +------+------+ | v4 | v6 | +------+------+ | 9 | 16 | +------+------+ 如果你开始一个字符串(“A”),ip_a如果它是 IPv6,这对于(字符串版本)将是 true(非零),或者对于 IPv4,这将是 false(零): LOCATE(':', ip_a) danblack 2022-04-14T16:23:11+08:002022-04-14T16:23:11+08:00 也有一个IS_IPV4功能作为一种机制。 所以: SELECT INET6_NTOA(ip) FROM TABLE WHERE IS_IPV4(INET6_NTOA(ip)) 注意 MariaDB-10.5 也有INET6数据类型。
如果
ip_n
是“数字”版本,那么IPv6 为 16,而 IPv4 则更小。
如果你开始一个字符串(“A”),
ip_a
如果它是 IPv6,这对于(字符串版本)将是 true(非零),或者对于 IPv4,这将是 false(零):也有一个IS_IPV4功能作为一种机制。
所以:
注意 MariaDB-10.5 也有INET6数据类型。