Yep, I know int(10) is just a display width... it's habit, probably a
bad one. And you're right about it being backwards, I used bc and the
top of my head to come up with that, I should've mentioned it in the email.

-Evan

Michael Stassen wrote:
> Cory @ SkyVantage wrote:
>> I'm using MySQL-Cluster 5.0, and we're doing some research.
>> What is everyone's opinion as to what the best fieldtype to store an IP
>> address in?
>>
>> varchar(16)  ?  because 16 is the max chars of an ip address...
>> char(16) ?
>> text(16)
>>
>> Not quite sure how to get the best memory utilization...
> 
> None of the above.
> 
> Peter M. Groen wrote:
>> How about:
>>
>>     Field 1: First octet (int)
>>     Field 2: Second octet (int)
>>     Field 3: Third octet (int)
>>     Field 4: Fourth octet (int)
>>
>> Searching takes less time like this, I reckon..
> 
> Too complicated.
> 
> Evan Borgstrom wrote:
>>     The same way the kernel deals with them; int(10) unsigned. To
> convert a
>> dotted quad string into int(10) use the following:
> 
> Right, use an INT UNSIGNED.  (You do know that the (10) in yourr
> definition is just a display width, right?)
> 
>> Using 192.168.10.50:
>> 192 + (168 * 2^8) + (10 * 2^16) + (50 * 2^24) = 839559360
> 
> You have that backwards.  839559360 is 50.10.168.192.  Which is why it
> is safer as well as easier to use the built-in functions INET_ATON() and
> INET_NTOA().
> 
>   mysql> SELECT INET_ATON('192.168.10.50');
>   +----------------------------+
>   | INET_ATON('192.168.10.50') |
>   +----------------------------+
>   |                 3232238130 |
>   +----------------------------+
>   1 row in set (0.00 sec)
> 
>   mysql> SELECT INET_NTOA(839559360);
>   +----------------------+
>   | INET_NTOA(839559360) |
>   +----------------------+
>   | 50.10.168.192        |
>   +----------------------+
>   1 row in set (0.00 sec)
> 
> See the manual for details
> <http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html>.
> 
>>     This is real handy if you're doing low level socket stuff and storing
>> addresses in the database.
> 
> Even if you're not doing "low level socket stuff", storing IPs as INTs
> is the right solution.  It takes less space than storing as strings, and
> lookups are faster because integer comparisons are faster than string
> comparisons.
> 
> Michael

-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to