0
点赞
收藏
分享

微信扫一扫

Mysql8 cast 语法错误 - 版本差异

zhyuzh3d 2022-03-25 阅读 60
sqlmysql

文章目录


有时候mysql版本不一致,也是个巨大的地雷啊~ 踩着了那就开花喽~

背景

出错日志

一个大版本上线的时候,测试突然说卡住了后台报错,=_=|| 跑去后台load日志,看到这样一句话

Caused by: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version for the right syntax to use near 'FLOAT)

嗯哼,sql语句报错,还是不支持的语法:cast(expression as float)

cast 介绍

天狗的日常 - 参考文档

cast(表达式 AS 目标数据类型)

从下面表格中可以看到,好像不支持Float类型!!!

支持的 TYPE 类型 描述
BINARY 二进制型
CHAR 字符型
DATE 日期,格式为 ‘YYYY-MM-DD’
DATETIME 日期加具体的时间,格式为 ‘YYYY-MM-DD HH:MM:SS’
TIME 时间,格式为 ‘HH:MM:SS’
DECIMAL float 型
SIGNED int 型
UNSIGNED 无符号int

问题查找

这是个很奇怪的问题,为啥开发和测试环境都ok,但是正式环境不一样呢!那就先看版本号吧

环境 mysql版本
dev 8.0.21
test 8.0.22
prod 8.0.16

大版本一致,这。。。在网上搜了一通,也没找到原因,那就只能去官网更新日志看看喽

mysql 官方升级日志

看出来了么,官方文档说,从8.0.17版本才开始CAST才支持FLOAT类型。好巧不巧,prod是8.0.16,真是擦肩而过啊~~

解决方案

升级mysql版本

升级版本是个有难度的活,还得找一个业务不繁忙的时间点,难度较大,暂时不能使用

转换为decimal

从cast介绍情况看,可以将sql语句换为cast(expression AS decimal)暂时解决问题!

后记

  1. 需要将dev/test/prod各个环境中的所有框架保持同一版本,不然出错了很难排查!
  2. 有空了多看下官方升级日志,里面都是宝贝呢!
举报

相关推荐

0 条评论