MySQL8升级遇到的各式各样问题

来源:这里教程网 时间:2026-03-01 16:15:32 作者:

自己原文公众号: https://mp.weixin.qq.com/s/j2b9yO_9r5dYvXogBfqEwQ

MySQL8已经出来2年多了,可以用了。尤其是大家在5.6和5.7上加字段加不上的,强烈推荐上MySQL8吧。

     最近有人问我升级需要注意什么?官网能查到的就是说要换JDBC的包。然后官网给出了一个和5.7不一样的语法:

mysql5.7group by  默认还有排序功能, 8.0 默认只分组不排序,需要加 order by 才排序。举例在 5.7

select dept_no,count(*) from t_group group by dept_no; 这样的是按照 dept_no 默认升序排序。在 8.0 中如果也需要实现同样的效果需要 select dept_no,count(*) from t_group group by dept_no  order by dept_no 这个差异点对开发影响不大,因为大多数开发人员都习惯于 8.0 的这种写法,甚至没有考虑过 5.7 的情况。

其他就没有其他了。(当然了有些参数和数据字典的名字这种和应用开发没什么关系这里就不说了)

     我觉得可能是官方(老美)觉得有些不该是问题的。但是我从不同渠道看到了其实还是有其他问题的。

     问题1:有些场景我们中国的开发人员喜欢全部用字符串(可能是java为了偷懒不 转换了)所以时间、数值全是字符串。(哎,oracle mysql java都是甲骨文的,这三个团队的尤其是java团队的就不考虑一下这个开发语言怎么来适配一下数据库吗)结果自然出乎意料,sum(string)的时候整数会出现小数点。比如原来是9现在显示9.0.   5.7没有这种情况8有。老美可能觉得数据结构是开发的基础,都应该掌握的。但是可能不符合中国国情。就像老外觉得SQL都应该用到索引,但是在我国全表扫描是常态。

    问题2:这样的设置我觉得不能说是有问题。这个意思是数据库的时区跟踪操作系统走。 那么操作系统时区是什么?

看上去也没有问题。

    不过测试环境有人反馈说时间差了13个小时。不解,严重不解。为什么?为了弄清楚这个问题只能去重现一下。

在MySQL建立一个表w(我意思是why的意思)就两列,id和time

编写(又抄又改的)一段主要是为了说明问题。

可以看到红框,我用的是8的jdbc,区别在于CJ两个字符。之前的是不带这个的。

绿色是我写的SQL(如果是我写代码我绝对会这样)

蓝色是站在开发角度写的(实在不明白开发为什么要这样做)也许这就是面向对象和面向数据库不可调和的。

黄色是最终结果,可以看出是差了13个小时。

对于这个问题,我的角度结论是操作系统没有错,数据库也没有错。如果用数据库自带的函数,也是通过JDBC写数据库也没问题。问题在于蓝色的写法需要有前提条件。我后来也问了其他用过8版本JDBC的开发。他们说他们是这样定义连接字符串的

jdbc:mysql://IP:3306/XXX?useUnicode=true&characterEncoding=UTF-8& serverTimezone=PRC&allowMultiQueries=true&autoReconnect=true&useSSL=false

加了红色部分就一点问题也没有了。

我在此依然是建议不管什么数据库你就用她自带的时间函数,这样少很多麻烦。

相关推荐