我試圖填充一個MySQL數據庫字段與IP地址的二進制(16)值,我得到:添加二(16)知識產權的價值MySQL數據庫
警告:#1265數據在行截斷列 'IP' 1
我想插入的二進制值是
00000000000000000000ffff5bd25452
我在做什麼錯?
我試圖填充一個MySQL數據庫字段與IP地址的二進制(16)值,我得到:添加二(16)知識產權的價值MySQL數據庫
警告:#1265數據在行截斷列 'IP' 1
我想插入的二進制值是
00000000000000000000ffff5bd25452
我在做什麼錯?
目前,你正在丟失使用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)
。
正確的SQL語法應該是'INSERT INTO
我有更新了答案,看看 –
值顯示的是已被轉換爲十六進制二進制字符串(使它顯示)。如果你想重新插入這個值 - 你需要使用類似的東西
UNHEX('00000000000000000000ffff5bd25452')
您要插入 「二進制」 值實際上是十六進制值,由至少'12×4 = 48'位。你的二進制列足夠寬以存儲這個值嗎?請告訴我們你的表格模式。 –
我正在使用phpMyAdmin,這是已經插入到前面字段中的值之一。我已經添加了一個帶有MySQL模式的圖片。 – user21616