【问题标题】:Add binary(16) Ip value to MySql database将 binary(16) Ip 值添加到 MySql 数据库
【发布时间】:2017-04-24 05:20:30
【问题描述】:

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

警告:#1265 第 1 行的“IP”列的数据被截断

我要插入的二进制值是

00000000000000000000ffff5bd25452

我做错了什么?

MySql table schema

【问题讨论】:

  • 您尝试插入的“二进制”值实际上是一个十六进制值,至少由12x4 = 48 位组成。您的二进制列是否足够宽以存储此值?请向我们展示您的表架构。
  • 我正在使用 phpMyAdmin,这是前面字段中已经插入的值之一。我添加了一张带有 MySQL 架构的图片。

标签: mysql binary


【解决方案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)


【讨论】:

  • 正确的 SQL 语法应该是 INSERT INTO &lt;your-table&gt; (IP) VALUES(UNHEX("00000000000000000000ffff5bd25452"));,但我仍然无法理解如何插入 IP 字符串,例如 107.180.58.16
猜你喜欢
  • 2017-01-15
  • 2017-07-14
  • 2012-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-26
相关资源
最近更新 更多