Mysql8 cast 语法错误 - 版本差异

8 篇文章 0 订阅
3 篇文章 0 订阅


有时候mysql版本不一致,也是个巨大的地雷啊~ 踩到了那就是遍地开花喽~~
记录一次因mysql版本不同,导致 cast(expression as float)语句报错~

背景

出错日志

一个大版本上线的时候,测试突然说卡住了后台报错,=_=|| 跑去后台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’
DECIMALfloat 型
SIGNEDint 型
UNSIGNED无符号int

问题查找

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

环境mysql版本
dev8.0.21
test8.0.22
prod8.0.16

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

mysql 官方升级日志

Additional target types for casts. The functions CAST() and CONVERT() now support conversions to types DOUBLE, FLOAT, and REAL. Added in MySQL 8.0.17. See Section 12.11, “Cast Functions and Operators”.

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

解决方案

升级mysql版本

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

转换为decimal

从cast介绍情况看,可以将转换数据类型换为decimal

后记

  1. 需要将dev/test/prod各个环境中的所有框架保持同一版本,不然出错了很难排查!
  2. 有空了多看下官方升级日志,里面都是宝贝呢!
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值