mysql ip转换_求助: MySQL 下 ip 地址 binary 和点分十进制形式转换的问题, inet_ntoa()...

搞了一下午了,没搞出来,来求助万能的 V 友了

列 src_ip 类型是 binary(16)

mysql> desc X20180327;

+--------------+----------------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+--------------+----------------------+------+-----+---------+----------------+

| auto_id | int(10) unsigned | NO | MUL | NULL | auto_increment |

| record_id | int(10) unsigned | NO | PRI | NULL | |

| src_zone | int(10) unsigned | NO | | NULL | |

| src_ip | binary(16) | NO | MUL | NULL | |

| src_port | smallint(5) unsigned | NO | | NULL | |

| dst_zone | int(10) unsigned | NO | | NULL | |

| dst_ip | binary(16) | NO | MUL | NULL | |

| dst_port | smallint(5) unsigned | NO | | NULL | |

存储方式如下:

首字节存储非法 IPv6 头,后 4 字节存储 ipv4 数值,其他字节填充 0,网络序存储

mysql> select HEX(src_ip) from FW_LOG_fwlog.X20180327 where auto_id = 1;

+----------------------------------+

| HEX(src_ip) |

+----------------------------------+

| FFBF000000000000000000007BF94C7D |

+----------------------------------+

1 row in set (0.00 sec)

我单独把值复制出来转换时没问题的

mysql> select inet_ntoa(0xFFBF000000000000000000007BF94C7D & 0xFFFFFFFF) from FW_LOG_fwlog.X20180327 where auto_id = 1;

+------------------------------------------------------------+

| inet_ntoa(0xFFBF000000000000000000007BF94C7D & 0xFFFFFFFF) |

+------------------------------------------------------------+

| 123.249.76.125 |

+------------------------------------------------------------+

1 row in set (0.00 sec)

mysql> select inet_ntoa(0xFFBF000000000000000000007BF94C7D) from FW_LOG_fwlog.X20180327 where auto_id = 1;

+-----------------------------------------------+

| inet_ntoa(0xFFBF000000000000000000007BF94C7D) |

+-----------------------------------------------+

| 123.249.76.125 |

+-----------------------------------------------+

1 row in set (0.00 sec)

mysql> select inet_ntoa(0x7BF94C7D);

+-----------------------+

| inet_ntoa(0x7BF94C7D) |

+-----------------------+

| 123.249.76.125 |

+-----------------------+

1 row in set (0.00 sec)

但是………………

mysql> select INET_NTOA(src_ip) from FW_LOG_fwlog.X20180327 where auto_id = 1;

+-------------------+

| INET_NTOA(src_ip) |

+-------------------+

| 0.0.0.0 |

+-------------------+

1 row in set, 1 warning (0.00 sec)

mysql> select inet_ntoa(src_ip&0xFFFFFFFF) from FW_LOG_fwlog.X20180327 where auto_id = 1;

+------------------------------+

| inet_ntoa(src_ip&0xFFFFFFFF) |

+------------------------------+

| 0.0.0.0 |

+------------------------------+

1 row in set, 1 warning (0.00 sec)

mysql> show warnings;

+---------+------+-----------------------------------------+

| Level | Code | Message |

+---------+------+-----------------------------------------+

| Warning | 1292 | Truncated incorrect INTEGER value: '??' |

+---------+------+-----------------------------------------+

1 row in set (0.00 sec)

该怎么处理呢?

版本:Ver 14.14 Distrib 5.1.58

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值