Alex Rivera | Logout

MySQL returning an empty field: CONCAT(nonEmpty1,empty2,nonEmpty3) = NULL

Asked 2009-06-11T13:52:50.537
13

I have PHP 5 code accessing a MyISAM table on MySQL 5 server. The query looks like this:

SELECT CONCAT(fName1,' ',mName2,' ',lName3) AS userName 
    FROM users 
    WHERE level > 10

When there's no mName filled in, I am expecting output like "fname lname" , but I'm getting "" (empty string) instead (the number of rows returned is correct). Where am I making a mistake?

PHP code:

<?php
$result = mysql_query($the_above_query);
while ($result_row = mysql_fetch_assoc($result)) {
    // do stuff with the name
    // except I'm getting empty strings in $result_row['userName']
}

Relevant part of table structure:

CREATE TABLE users {
    /* -snip- */ 
    `fName1` varchar(50) default NULL,      
    `mName2` varchar(50) default NULL,      
    `lName3` varchar(50) default NULL,      
    `level` int(11) default 0,      
    /* -snip- */ 
} ENGINE=MyISAM DEFAULT CHARSET=utf8;

(also, is this way (column concatenation in MySQL) a good idea, or should I fetch the columns to PHP and join them there?)


Turns out that I was getting back a NULL; PHP treats a returned NULL and empty string("") similarly, you'd have to compare with === to see the difference.

Edit
Report

2 Answers

25

From google: http://bugs.mysql.com/bug.php?id=480

[23 May 2003 4:32] Alexander Keremidarski

Thank you for taking the time to write to us, but this is not a bug. Please double-check the documentation available at http://www.mysql.com/documentation/ and the instructions on how to report a bug at http://bugs.mysql.com/how-to-report.php

This is doccumented behaviour of CONCAT() function.

From Manual chapter 6.3.2 String Functions

CONCAT(str1,str2,...) Returns the string that results from concatenating the arguments. Returns NULL if any argument is NULL

Use CONCAT_WS() instead or wrap NULLable paremeters with IFNULL() function.

Documentation and usage for CONCAT_WS: http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_concat-ws

answered 2009-06-11T13:56:17.253
16

From MYSQL docs

CONCAT() returns NULL if any argument is NULL.

you want to use CONCAT_WS()

CONCAT_WS(separator,str1,str2,...)

But best bet is to just pull it back and use php cause if you need a different format or just one of those fields later you'll have to make another db call

answered 2009-06-11T13:59:48.273

Your Answer