Mysql的max()函数9大于10问题
在公司老项目使用过程中都遇到过这个问题,所以这里记录下来
问题描述
使用系统中发现系统的字典新增之后排序不固定,于是查找问题,打开数据库发现sort大部分都是"10"
mybatis中查询语句如下:
`select IFNULL(MAX(DIC_SORT),0) FROM DIC_INFO WHERE 'ProjectId' =#{ProjectId}`
发现该语句查出来的数值为 “9”
原因分析
原因是因为,字符串截取函数截取出来的数字是 varchar
类型的。而 max
函数对于字符串的比较,是先比较首字符的 ASCii 码
的大小,然后依次往后进行比较的,所以字符串 9
比 字符串 10
大。
解决办法
所以如果想返回自然顺序的最大值,需要把类型转换为 int
后再比较。
替换函数:cast(xxx as UNSIGNED INTEGER)
Sql如下:
`select IFNULL(cast(MAX(DIC_SORT)),0) FROM DIC_INFO WHERE 'ProjectId' =#{ProjectId}`
这里的 UNSIGNED INTEGER 可以为:
`浮点数 : DECIMAL`
`整数 : SIGNED INTEGER 等同于 INTEGER`
`无符号整数 : UNSIGNED INTEGER`
`二进制,同带 binary 前缀的效果 : BINARY
字符型,可带参数 : CHAR()
日期 : DATE
时间: TIME
日期时间型 : DATETIME`
本文作者:Argilgamesh
本文链接:https://www.cnblogs.com/Argilgamesh/p/18191736
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步