2017-04-24 30 views
1

我試圖填充一個MySQL數據庫字段與IP地址的二進制(16)值,我得到:添加二(16)知識產權的價值MySQL數據庫

警告:#1265數據在行截斷列 'IP' 1

我想插入的二進制值是

00000000000000000000ffff5bd25452

我在做什麼錯?

MySql table schema

+1

您要插入 「二進制」 值實際上是十六進制值,由至少'12×4 = 48'位。你的二進制列足夠寬以存儲這個值嗎?請告訴我們你的表格模式。 –

+0

我正在使用phpMyAdmin,這是已經插入到前面字段中的值之一。我已經添加了一個帶有MySQL模式的圖片。 – user21616

回答

0

目前,你正在丟失使用BINARY(16)的數據。要插入你需要UNHEX的值,例如:

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

把它找回來,你會被要求使用十六進制,有原來的形式回:

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)


+0

正確的SQL語法應該是'INSERT INTO (IP)VALUES(UNHEX(「00000000000000000000ffff5bd25452」));'但我仍然無法理解如何插入IP字符串,例如'107.180.58.16',例如 – user21616

+0

我有更新了答案,看看 –

0

值顯示的是已被轉換爲十六進制二進制字符串(使它顯示)。如果你想重新插入這個值 - 你需要使用類似的東西

UNHEX('00000000000000000000ffff5bd25452')