mysql中ifnull和isnull对null值的判断有区别吗?为什么判断结果会不同

zim78luck 2017-04-27 10:39:39
测试如下:
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`a` varchar(255) CHARACTER SET utf8 NOT NULL,
`b` varchar(255) CHARACTER SET utf8 NOT NULL,
`c` decimal(14,2) NOT NULL DEFAULT '0.00',
`d` int(255) NOT NULL DEFAULT '0',
`e` varchar(255) CHARACTER SET utf8 NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci ROW_FORMAT=COMPACT;

-- ----------------------------
-- Records of test
-- ----------------------------
INSERT INTO `test` VALUES ('1', 'a', '0', '1.10', '2', 'aa');
INSERT INTO `test` VALUES ('2', 'a', '1', '2.10', '3', 'bb');
INSERT INTO `test` VALUES ('3', 'b', '0', '1.40', '4', 'cc');
INSERT INTO `test` VALUES ('4', 'b', '1', '2.10', '5', 'ded');

1)测试语句如下:
select a,b,IFNULL(a,'合计') a1, if(ISNULL(a),'合计',a) a2,sum(c) c from test group by a,b with ROLLUP
2)结果如下:

3)通过上面红色区域,可以看到,通过ifnull,能判断出null值,通过isnull,没有判断出

为什么会出现这种情况?是我的用法不对吗?
...全文
659 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
rucypli 2017-04-27
  • 打赏
  • 举报
回复
加个isnull(a)列可以看到这个是0 非null
zjcxc 2017-04-27
  • 打赏
  • 举报
回复
应该算 BUG 吧 a/b 列的定义是 NOT NULL, 所以 ISNULL 的结果始终是0, 如果你把列定义改成 NULL, 则 ISNULL 就对了 ISNULL 看起来是直接检查列定义的 NOT NULL 属性,如果是 NOT NULL,则不再数据上判断 你可以用 create temporary table tt select a, b, sum(c) as c from test group by a, b with rollup; 这样就会收到错误: ERROR 1048 (23000): Column 'b' cannot be null

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧