IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 关于Mysql、MyBatis使用Gourp By、IFNULL、UUID函数无效的问题 -> 正文阅读

[大数据]关于Mysql、MyBatis使用Gourp By、IFNULL、UUID函数无效的问题

在Mysql中有些场景要在group by 中不对 null 数据做分组

场景示例:
在这里插入图片描述

在网络上解决方式都是用GROUP BY IFNULL(字段,UUID())这种方式来排除null数据的合并分组

参考链接:https://zhuanlan.zhihu.com/p/424172896

UUID():此函数是生成唯一的ID值,通常用来生成主键
IFNULL(A,B): 如果A是空的那么IFNULL的结果就是B,反之A不为空那么IFNULL的结果就是A
IFNULL()与UUID()组合使用就可以在group by分组时将null空数据生成一个唯一的ID,这样一来,每个null数据都会有一个唯一的ID,就不会合并在一起了。

但是!!!!

我们在Mysql执行一下GROUP BY IFNULL(字段,UUID())这种方式发现:
在这里插入图片描述

我们在Mysql使用GROUP BY IFNULL(字段,UUID())时会没有效果,这是为什么呢?

经过一番研究因为在使用IFNULL(字段,UUID())时UUID()生成的ID值都是一样的,所以没有效果
在这里插入图片描述

为什么使用UUID()生成的ID都是一样?

我在网络上找到了很多种解释:
有的说Mysql字符集出了问题,要将Mysql字符集修改成UTF-8的;

参考链接:https://blog.csdn.net/weixin_42514562/article/details/113233270

有的说是navicat工具上显示id 重复 而在MySQL Client可以正常执行,是navicat工具有问题;

参考链接:https://www.freesion.com/article/5966548260/

有的直接给出了解决方案,就是UUID()用MD5()包起来,就是写成IFNULL(字段,MD5(UUID()))

参考链接:https://zhuanlan.zhihu.com/p/159060930

前两种解决方案我都尝试过发现没有作用,最后一种解决方案把IFNULL(字段,UUID())
换成IFNULL(字段,MD5(UUID()))之后在mysql执行成功了
在这里插入图片描述
证明此方法有效,所以就将IFNULL(字段,MD5(UUID()))放到了Mybatis的xml中使用了

注意!!!!

很奇怪的是,在Mybatis执行却不生效,输出的语句确实是正确的,但是在Mybatis执行还是会把null合并在一起了,没有将null数据通过UUID()生成唯一的ID分开。
在这里插入图片描述在这里插入图片描述

最后解决方案!!!!

通过一番尝试,将MD5(UUID())改成了UUID_SHORT(),则写成IFNULL(字段, UUID_SHORT())
在这里插入图片描述
在这里插入图片描述

UUID_SHORT():与UUID()一样,只不和UUID()返回的长度字符串不同

最后问题解决,如果你项目中使用了Mysql和Mybatis,然后也碰到了group by 中不对 null 数据做分组的需求,就直接用 GROUP BY IFNULL(字段, UUID_SHORT()) 即可!

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-28 11:56:15  更:2022-04-28 12:00:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:52:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码