我正在尝试使用 IP 地址的二进制 (16) 值填充 MySQL 数据库字段,我得到:
Warning: #1265 Data truncated for column 'IP' at row 1
我要插入的二进制值是
00000000000000000000ffff5bd25452
我做错了什么?
最佳答案
目前您正在丢失使用 BINARY(16) 的数据。要插入,您需要对值进行 unhex,例如:
INSERT INTO <your-table> (IP) VALUES(UNHEX("00000000000000000000ffff5bd25452"));
要取回它,您需要使用 HEX,才能取回原始表格:
SELECT HEX(IP) FROM <your-table>;
编辑 1:根据您的评论
how can I insert an IP string such as 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)
。
关于mysql - 将 binary(16) Ip 值添加到 MySql 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43580330/