MySQL veritabanına IP adresi kaydı

MySQL veritabanına IP adreslerini hangi türde kayıt edeceğinizi biliyor musunuz? Elbette INT veri türü. Nasıl olabilir diyeceksiniz. Çözüm yolu yazının devamında 🙂

MySQL veritabanına IP adresi kaydı

Ip adreslerini veritabanına kaydetmek için 15 karakter uzunluğunda CHAR ya da VARCHAR veri türü kullanıyor olabilirsiniz. Ancak bu işlemi 10 karakter uzunluğundaki INT veri türü ile halledebilirsiniz.

INET_ATON ve INET_NTOA kullanmamız gereken her iki fonksiyon oluyor.

Tablodaki Ip adresi alan türü

Tablonuzda IP adreslerini kayıt edeceğiniz alan türü INT ve uzunluğu 10 karakter olmalıdır. Ayrıca özniteliğini UNSIGNED giriniz.

MySQL INET_ATON

Bu fonksiyon ile IP adresini tam sayısal değere dönüştürebilirsiniz. PHP ile aynı işlem ip2long fonksiyonu ile yapılır.

Örneğin tablonuza kayıt esnasında şöyle kullanacaksınız:

[SQL]insert into yorumlar (id,ad,yorum,ip) values (NULL, ‘hakan’, ‘deneme mesaj’, INET_ATON(‘127.0.0.1’))[/SQL]

Gördüğünüz üzere 127.0.0.1 ip adresini INET_ATON fonksiyonu içerisine girdim. Böylece tablo içerisine 2130706433 değeri yazdırılacaktır.

MySQL INET_NTOA

Artık ip adreslerini tablolarınıza nasıl kayıt edeceğinizi öğrendiniz. Peki bu kodlanmış ip adreslerini okumak isterseniz? O vakit MySQL INET_NTOA kullanacaksınız. Bu fonksiyon ise PHP ile long2ip olarak geçmektedir.

[SQL]Select ad, yorum, INET_NTOA(ip) as ip_adresi from yorumlar[/SQL]

Ip adresi alanını seçmeden önce INET_NTOA kullandım ve böylece sayısal değerleri dönüştürerek gerçek ip adreslerini elde ettim 🙂

Hemen test edelim

Farkı merak ettim ve sizler için ufak bir test uyguladım 🙂 Yerel sunucumda dmry.net üzerindeki veritabanın eski bir kopyası yer alıyor. Oradaki yorumlar tablosu 31,488 adet kayıt içeriyor. Bu tabloda ip adresi alanı varchar türünde ve 100 karakter uzunluğunda tanımlanmış. Ayrıca ip adresleri karakter olarak giriliyor. Tablo bu haliyle 16.7 MB boyutunda.

Sizler için ip adresi alanını INT(10) yaptım ve tüm ip adreslerini yukarıdaki örnekte olduğu gibi kodladım. Sonrasında aynı tablo 16.5 MB boyutuna düştü 🙂