将二进制(16)Ip值添加到MySql数据库

时间:2017-04-24 05:20:30

标签: mysql binary

我正在尝试使用二进制(16)值的IP地址填充MySQL数据库字段,并且我得到了:

  

警告:#1265数据截断列' IP'在第1行

我想插入的二进制值是

  

00000000000000000000ffff5bd25452

我做错了什么?

MySql table schema

1 个答案:

答案 0 :(得分:1)

目前您使用BINARY(16)丢失了数据。要插入,您需要取消该值,例如:

INSERT INTO <your-table> (IP) VALUES(UNHEX("00000000000000000000ffff5bd25452"));

为了取回它,您将被要求使用HEX,以恢复原始表格:

SELECT HEX(IP) FROM <your-table>;

编辑1 :在您的评论中

  

如何插入IP字符串,例如107.180.58.16

由于IPv4地址长4个字节,与INT (UNSIGNED)

相同

使用INET_ATON将其转换为INT,并INET_NTOA将其转换回IPv4 - 例如:

INSERT INTO <your-table> (IP) VALUES (INET_ATON("107.180.58.16"));
SELECT INET_NTOA(IP) FROM <your-table>;

并且,对于IPv6地址,即128位,您可以使用16字节二进制字段BINARY(16)VARBINARY(16)