公司最近在做国产化改造,遇到一个问题挺坑的,记录一下 避免以后再踩。
问题是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在网上能搜到的东西着实也有限。。),主要还是想说思维不能太局限,当发现原来的经验行不通的时候,也正好是进步的时候。