mysql - 将 binary(16) Ip 值添加到 MySql 数据库

标签 mysql binary

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

Warning: #1265 Data truncated for column 'IP' at row 1

我要插入的二进制值是

00000000000000000000ffff5bd25452

我做错了什么?

MySql table schema

最佳答案

目前您正在丢失使用 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/

相关文章:

c - 从文件中读取每一行并将该行拆分为字符串和 C 中的数组

javascript - 使用较短的数据库查询代码将数据插入 MySQL 数据库表

PHP/MySql 选择与回复分组的评论

mysql - 如何从二进制日志文件中获取数据并插入到我们想要的 MySQL 表中?

audio - 如何打开 .RAW 文件以查看除 AUDACITY 之外的内容

windows - 搜索维护的二进制差异/补丁工具或库

mysql - celery 、Django 和 PyMySQL

两张表之间的Mysql操作,并希望在一张表中输出

mysql - varchar(10) 和 varchar(1000) 在存储长度小于 10 的字符串时有什么区别吗?

sql - Vertica:将 Bitstring 转换为整数