把我的問題轉化爲視角:如何將二進制轉換爲mysql中的整數?
我有一個PHP應用程序,它將用戶的IP存儲在MySQL表中。
列類型爲VARBINARY(16)
,應用程序使用PHP的inet_pton
來形成二進制字符串。
這就是字符串有4個字節的典型IP4地址。
如何從表格中檢索這些IP,以人們可讀的形式顯示它們?
我目前的解決辦法是:
select INET_NTOA(CONV(HEX(ip),16,10)) from operation_ip;
有沒有更直接的方式來做到這一點?
特別是CONV(HEX(x),16,10)
最簡單的方法將4個字節變成一個整數(實際上我相信它甚至不是一個整數,而是一個看起來像整數的字符串)。我使用VARBINARY(16)
,因爲PHP的inet_pton
可以返回16個字節的IPv6地址。AFAIK MySQL的INET_NTOA
不支持IPv6,但目前這並不是我最關心的問題)。
如果你想要一個更直接的形式,請不要將IP地址轉換爲二進制爲了將其存儲在數據庫中...或者在數據庫中同時存在地址的字符串和二進制值。 –