我正在尝试使用二进制(16)值的IP地址填充MySQL数据库字段,并且我得到了:
警告:#1265数据截断列' IP'在第1行
我想插入的二进制值是
00000000000000000000ffff5bd25452
我做错了什么?
答案 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)
。