Greetings, While working on a routine to clean out some duplicate entries from our IP management table, I stumbled upon the following errant behavior...
Logging to file 'concatbug.txt' mysql> \s -------------- Connection id: 73465 Current database: OBFmtable Current user: user@localhost Current pager: stdout Using outfile: 'concatbug.txt' Server version: 3.23.49a-log Protocol version: 10 Connection: Localhost via UNIX socket Client characterset: latin1 Server characterset: latin1 UNIX socket: /tmp/mysql.sock Uptime: 3 days 12 hours 29 min 58 sec Threads: 30 Questions: 2395300 Slow queries: 4 Opens: 25968 Flush tables: 1 Open tables: 37 Queries per second avg: 7.874 -------------- mysql> desc ips; +-------+---------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+----------------+ | ID | int(11) | | PRI | NULL | auto_increment | | OCT1 | int(3) | | | 0 | | | OCT2 | int(3) | | | 0 | | | OCT3 | int(3) | | | 0 | | | OCT4 | int(3) | | MUL | 0 | | | SID | int(11) | | MUL | 0 | | | AVAIL | int(1) | | | 0 | | +-------+---------+------+-----+---------+----------------+ 7 rows in set (0.00 sec) mysql> select *,concat_ws('.',oct1,oct2,oct3,oct4) ip,concat(oct1,'.',oct2,'.',oct3,'.',oct4) test,count(*) c from ips group by oct1,oct2,oct3,oct4 having c>1; +------+------+------+------+------+-----+-------+--------------+----------------+---+ | ID | OCT1 | OCT2 | OCT3 | OCT4 | SID | AVAIL | ip | test | c | +------+------+------+------+------+-----+-------+--------------+----------------+---+ | 3424 | 63 | 151 | 144 | 84 | 0 | 1 | 63.151.144.8 | 63.151.144.84 | 2 | | 3425 | 63 | 151 | 144 | 85 | 0 | 1 | 63.151.144.8 | 63.151.144.85 | 2 | | 3426 | 63 | 151 | 144 | 86 | 0 | 1 | 63.151.144.8 | 63.151.144.86 | 2 | | 3427 | 63 | 151 | 144 | 87 | 0 | 1 | 63.151.144.8 | 63.151.144.87 | 2 | | 3428 | 63 | 151 | 144 | 88 | 0 | 1 | 63.151.144.8 | 63.151.144.88 | 2 | | 3429 | 63 | 151 | 144 | 89 | 0 | 1 | 63.151.144.8 | 63.151.144.89 | 2 | | 3430 | 63 | 151 | 144 | 90 | 0 | 1 | 63.151.144.9 | 63.151.144.90 | 2 | | 3431 | 63 | 151 | 144 | 91 | 0 | 1 | 63.151.144.9 | 63.151.144.91 | 2 | | 3432 | 63 | 151 | 144 | 92 | 0 | 1 | 63.151.144.9 | 63.151.144.92 | 2 | | 3433 | 63 | 151 | 144 | 93 | 0 | 1 | 63.151.144.9 | 63.151.144.93 | 2 | | 3434 | 63 | 151 | 144 | 94 | 0 | 1 | 63.151.144.9 | 63.151.144.94 | 2 | | 3435 | 63 | 151 | 144 | 95 | 0 | 1 | 63.151.144.9 | 63.151.144.95 | 2 | | 3436 | 63 | 151 | 144 | 96 | 0 | 1 | 63.151.144.9 | 63.151.144.96 | 2 | | 3437 | 63 | 151 | 144 | 97 | 0 | 1 | 63.151.144.9 | 63.151.144.97 | 2 | | 3438 | 63 | 151 | 144 | 98 | 0 | 1 | 63.151.144.9 | 63.151.144.98 | 2 | | 3439 | 63 | 151 | 144 | 99 | 0 | 1 | 63.151.144.9 | 63.151.144.99 | 2 | | 3440 | 63 | 151 | 144 | 100 | 0 | 1 | 63.151.144.1 | 63.151.144.100 | 2 | | 3441 | 63 | 151 | 144 | 101 | 0 | 1 | 63.151.144.1 | 63.151.144.101 | 2 | | 3442 | 63 | 151 | 144 | 102 | 0 | 1 | 63.151.144.1 | 63.151.144.102 | 2 | | 2662 | 63 | 151 | 147 | 54 | 615 | 0 | 63.151.147.5 | 63.151.147.54 | 2 | +------+------+------+------+------+-----+-------+--------------+----------------+---+ 20 rows in set (0.02 sec) mysql> quit Notice the difference between the result columns of 'ip' and 'test'... ------- One of my colleagues asked me to give this a try: mysql> select *,concat_ws('.','9999',oct2,oct3,oct4) ip,concat(oct1,'.',oct2,'.',oct3,'.',oct4) test,count(*) c from ips group by oct1,oct2,oct3,oct4 having c>1; +------+------+------+------+------+-----+-------+--------------+----------------+---+ | ID | OCT1 | OCT2 | OCT3 | OCT4 | SID | AVAIL | ip | test | c | +------+------+------+------+------+-----+-------+--------------+----------------+---+ | 3424 | 63 | 151 | 144 | 84 | 0 | 1 | 9999.151.144 | 63.151.144.84 | 2 | | 3425 | 63 | 151 | 144 | 85 | 0 | 1 | 9999.151.144 | 63.151.144.85 | 2 | | 3426 | 63 | 151 | 144 | 86 | 0 | 1 | 9999.151.144 | 63.151.144.86 | 2 | | 3427 | 63 | 151 | 144 | 87 | 0 | 1 | 9999.151.144 | 63.151.144.87 | 2 | It is now apparent that the display width for 'ip' is being set to a max of 12 and cutting off the full result... I would assume: Calculated Field Width == SUM(type_size(oct1, oct2, oct3, oct4)) or 12 It appears to only do this in a GROUP BY type of SELECT... Using HAVING, or not, still results in same chopped effect... ------ Non GROUP BY queries work as desired... mysql> select *,concat_ws('.','9999',oct2,oct3,oct4) ip,concat(oct1,'.',oct2,'.',oct3,'.',oct4) test,count(*) c from ips LIMIT 2; +------+------+------+------+------+-----+-------+-----------------+----------------+ | ID | OCT1 | OCT2 | OCT3 | OCT4 | SID | AVAIL | ip | test | +------+------+------+------+------+-----+-------+-----------------+----------------+ | 3424 | 63 | 151 | 144 | 84 | 0 | 1 | 9999.151.144.84 | 63.151.144.84 | | 3425 | 63 | 151 | 144 | 85 | 0 | 1 | 9999.151.144.85 | 63.151.144.85 | As shown above, CONCAT_WS is now displaying properly without being limited to 12 char display... Can anyone confirm if this is a bug or not... Thanks... -- Terra sysAdmin FutureQuest, Inc. http://www.FutureQuest.net --------------------------------------------------------------------- Before posting, please check: http://www.mysql.com/manual.php (the manual) http://lists.mysql.com/ (the list archive) To request this thread, e-mail <[EMAIL PROTECTED]> To unsubscribe, e-mail <[EMAIL PROTECTED]> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php