> 文章列表 > mysql(beetlsql框架)适配人大金仓(KingBase)有感

mysql(beetlsql框架)适配人大金仓(KingBase)有感

mysql(beetlsql框架)适配人大金仓(KingBase)有感

毁灭吧,前几天加班适配kingbase,发现坑是真滴多,小小总结一波。

tips:kingbase的语法可以直接参照pgsql...他们两个是通用的(应该)

 

1.    ` 的坑

在Mysql里面的 `(不是单引号!' 和 ` 还是有点区别的) 

这是拿来标识关键字,让mysql把字段识别为普通的字段,而不是把他当成关键字,比如group(吐槽:我们项目里面大量的使用了`,给我人改麻了)。

所有的在Kingbse全都得换成双引号 ",不然就会报错。

2. group_concat( )的坑

我在网上看见好多人是只需要平替换成wm_concat()就行了。。。。。

结果实际上运行下来,如果里面只是单个字段,确实可以平替。但是如果你使用group_concat的基础上,在里面对字段做了拼接,那么就会报找不到函数的错误。。。

比如

 group_concat( '(vuln-',oss_vulnerability.id,')', oss_vulnerability.cve_no)

这样的拼接。你就不能写成这样

wm_concat('(vuln-',oss_vulnerability.id,')', oss_vulnerability.cve_no)

这个地方你只能用另外的一种拼接方法来替换

 string_agg('(vuln-' || oss_vulnerability.id || ')' || oss_vulnerability.cve_no, ', ')

3.关键字字段的坑

我不太明白为什么beetlsql 对Mysql的适配对于关键字字段就能不报错。但是在Kingbase里面。比如你有一个字段是group,那么你使用beetlsql 的所有关于这个字段的,自带查询或者查找方法。都会报group旁边出错。这个地方要不然改字段。要不然把自带方法写成sql来使用。。。

啊啊啊啊!所以大家不要用sql的关键字,保留字做字段名。如果你想要获得鼓励的话,那我会微笑着对你说,我测你*(雪豹别叫)

4.group by的坑 

在kingbase里面,如果你使用了group by来查询 ,那么你查询的字段必须要在group by里面被分组,又或者必须在聚合函数里面。

举个栗子!

现在有一个表,有三个字段。a b c

现在写一条sql

select a,b,c from table group by a

在mysql中没什么问题。但是如果在Kignbase中必须要前后一一对应

select a,b,c from table group by a,b,c

或者对b,c使用聚合函数。

mysql可以对分组后的未知列选择第一条。但是kingbase 必须要你显示的指明分组之后,这个列到底使用哪条数据的值!

所以你要考量一下,这个对你的查询功能是否有影响。

5. No results were returned by the query的坑

改用kingbase之后,我自己写的insert语句,一直在报这个错误。我在网上搜了一下,说要用什么spring-data的@modifying注解。但是我项目又没有这个依赖。

实际上每一个数据库框架都应该有一个注解。拿来标识,这是一个更新数据的sql。而不是查找。比如在beetlsql里面使用@Update 加上它就没问题了

6.保命

 如果有任何错误,请及时告诉我。