公司最近在做国产化改造,遇到一个问题挺坑的,记录一下 避免以后再踩。
问题是POWER函数,作用:POWER(a,b), 返回 a的b次方。
直接上图看执行结果:
mysql:

人大金仓:

可以看出来同样的一条sql结果是不一样的,原因是在Kingbase(人大金仓)中,他的一些规则和java有点像,比如 这里的1/3,因为是两个INTEGER类型做运算,所以他的结果为0,而任何数的0次方都为1,所以kingbase的power函数里,后面一个数不能直接写1/3,写为1.0/3.0就可以了。

当然,还有很多语法都是不一样的,只不过在kingbase中如果和mysql语法不兼容的时候基本都会有报错信息帮助排查,而这个是没有错误信息也可以正常运算的,只不过计算结果不同,相当于数据问题了,所以排查会费些时间。
总结:
其实这个问题并不难,只是因为惯性思维导致排查起来容易忽略一些东西,在开发中我们经常会说的一句话是两边都是一模一样的,怎么一个行一个不行,肯定是环境问题或者软件问题而不去处理,但其实根本原因还是对于新事物了解还不够(当然,kingbase在网上能搜到的东西着实也有限。。),主要还是想说思维不能太局限,当发现原来的经验行不通的时候,也正好是进步的时候。
本文讲述了在进行国产化改造时,遇到Power函数在Kingbase(人大金仓)与MySQL结果不同的情况,由于类型转换规则不同导致结果差异,提醒开发者注意新环境中的隐性数据问题和习惯性思维调整。
6104

被折叠的 条评论
为什么被折叠?



