วิธีเก็บ IP ลงฐานข้อมูลแบบประหยัดพื้นที่

วิธีเก็บ IP ลงฐานข้อมูลแบบประหยัดพื้นที่

ปกติ เวลาที่เราสร้าง field ใน database เพื่อเก็บข้อมูล ที่เป็น ip เราจะต้องสร้าง char(15) หรือบางคนก็สร้าง varchar(15) หรือบางคน (อันนี้น่าจะเป็นคนที่มือใหม่จริงๆ) ก็สร้างเป็นชนิด text เลย ซึ่ง แต่ละกรณี ทำให้เปลืองพื้นที่มาก เอาอย่างเช่น char(15) เราก็ต้องใช้ 15 bytes ต่อการเก็บ 1 หมายเลข IP หรือ varchar ใช้ 16 bytes และ text ใช้ 17 bytes กันเลยทีเดียว นี่ยังไม่นับที่เป็น กรณี UTF-8 อีก เพราะว่าถ้าเป็น UTF-8 ก็จะใช้พื้นที่ 45, 48, 51 byte ตามลำดับ ต่อ1ip เลยทีเดียว ถือว่าเปลืองมากเพราะลองคิดดูว่าหากเป็นแสน record คงจะใช้พื้นที่ไม่น้อยเลย และจะดีกว่ามั้ย ถ้าเราลดเหลือแค่ 4 byte ต่อ 1 ip

วิธีง่ายมากแต่ต้องมีตัวช่วย ก็คือ php function ip2long($ip) และ long2ip($ip) ซึ่งจะทำหน้าที่แปลง ip ให้เป็น ตัวเลข และแปลงตัวเลขกลับมาเป็น ip โดย ฐานข้อมูลเราใช้เพียง int ชนิด unsigned ซึ่งใช้เพียง 4 byte ต่อ 1 record เท่านั้น

วิธีการก็คือ เก็บ ip ใส่ตัวแปร $ip แล้วเอาไปผ่าน

$ip = ip2long($ip);

ก็จะทำให้ $ip เป็นตัวเลขแล้ว เอาไปเก็บในฐานข้อมูลต่อไป

แล้วตอนเอากลับมาก็ใช้

$ip = long2ip($ip);

ก็จะกลับมาเป็น ip เหมือนเดิม

จริงๆไม่ใช่เรื่องใหม่หรอกครับ เค้าใช้กันมานาน ทั่วบ้านทั่วเมือง ผมก็ใช้มาพักหนึ่งแล้ว เลยเอามาแบ่งปันครับ

Create: Modify : 2010-08-02 09:41:29 Read : 6806 URL :