MySQL 返回空字段:CONCAT(nonEmpty1,empty2,nonEmpty3) = NULL

2024-03-12

我有 PHP 5 代码访问 MySQL 5 服务器上的 MyISAM 表。查询如下所示:

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

当没有填写mName时,我期待像 "fname lname" 这样的输出,但我得到的是 "" (空字符串)(返回的行数是正确的)。我哪里出错了?

PHP代码:

<?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']
}

表结构的相关部分:

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;

(另外,这种方式(MySQL 中的列串联)是一个好主意,还是我应该将列提取到 PHP 并在那里加入它们?)


结果我得到了一个 NULL; PHP 类似地处理返回的 NULL 和空字符串 (""),您必须与 === 进行比较才能看到差异。


来自谷歌:http://bugs.mysql.com/bug.php?id=480 http://bugs.mysql.com/bug.php?id=480

[2003 年 5 月 23 日 4:32] 亚历山大·克雷米达尔斯基

感谢您抽出时间给我们写信,但这不是 一个错误。请仔细检查以下位置提供的文档:http://www.mysql.com/documentation/ http://www.mysql.com/documentation/和说明 如何报告错误http://bugs.mysql.com/how-to-report.php http://bugs.mysql.com/how-to-report.php

这是 CONCAT() 函数的记录行为。

来自手册第 6.3.2 字符串函数

CONCAT(str1,str2,...) 返回连接参数所产生的字符串。如果有则返回 NULL 参数为 NULL

使用 CONCAT_WS() 代替或使用 IFNULL() 函数包装 NULLable 参数。

CONCAT_WS 的文档和用法:http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_concat-ws http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_concat-ws

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL 返回空字段:CONCAT(nonEmpty1,empty2,nonEmpty3) = NULL 的相关文章

随机推荐