Hi,

You can actually unpack them using some fairly cryptic stuff. I would only use this to unpack them once to re-store them as INT. Here's an example:

CREATE TABLE ip (packed CHAR(4));
INSERT INTO ip (packed) VALUES (0xB16212C);

mysql> SELECT * FROM ip;
+--------+
| packed |
+--------+
|
  !,   |
+--------+
1 row in set (0.00 sec)

mysql> SELECT
    ->   INET_NTOA(
    ->     (ord(substring(packed, 1, 1)) << 24) +
    ->     (ord(substring(packed, 2, 2)) << 16) +
    ->     (ord(substring(packed, 3, 3)) <<  8) +
    ->     (ord(substring(packed, 4, 4)))
    ->   ) AS unpacked
    -> FROM ip;
+-------------+
| unpacked    |
+-------------+
| 11.22.33.44 |
+-------------+
1 row in set (0.00 sec)

Regards,

Jeremy

Baron Schwartz wrote:
I think Gerald was suggesting you convert the IP's into integers and then do bitwise stuff on them. I don't know of a way to do what you're asking.

Baron

Wagner, Chris (GEAE, CBTS) wrote:
Those functions concern dotted quad IP addresses, not packed binaries.

Anybody know of some obscure MySQL functions to do bit logic on strings
or get MySQL to recognize a char sequence as an integer?

"Gerald L. Clark" wrote:
Wagner, Chris (GEAE, CBTS) wrote:
Hi.  I've got IP addresses stored in the database as packed binaries.
i.e. binary(4).  I put them in there that way so that I could do bitwise
logic on them to do subnet searches.  e.g. ...WHERE `ip` & 'mask' =
'network'.  Only it turns out that as far as I can tell MySQL can't do
bit logic on strings, only integers.  I came up with an onerous SQL call
that eats the 4 bytes and makes an integer out of them but there's got
to be a better way.  The worst case is that I redo the database to have
all the IP's as integers.

Anybody know of a way to make MySQL either do the bit logic on the
string or convert/cast the string as an integer?  Thanks.


Try INET_ATON() and INET_NTOA().

--
Gerald L. Clark
Supplier Systems Corporation


--
high performance mysql consulting
www.provenscaling.com

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

Reply via email to