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

文章总结了将系统从Mysql迁移到Kingbase过程中遇到的问题,包括`反引号`的替换、`group_concat()`与`wm_concat()`的区别、关键字字段处理、groupby的规则变化以及无结果返回错误等。解决这些问题需要对SQL进行调整,例如使用双引号代替反引号,用string_agg()替代特定的拼接操作,并确保所有查询遵循Kingbase的语法规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

毁灭吧,前几天加班适配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.保命

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

Kingbase数据库中,可以使用String_agg()函数来替代MySQL中的GROUP_CONCAT()函数来拼接字段为字符串。 例如,可以使用以下语句来实现类似的功能: SELECT String_agg(CONCAT('%',C1), ';' ) FROM TABLE_NAME; 关于Kingbase数据库在处理关键字字段时的适配问题,beetlsql在处理MySQL时可能报错,但在Kingbase中可能会出现问题。例如,如果你的字段名为"group",使用beetlsql的自带方法进行查询或查找时可能会报错。在这种情况下,你可以考虑修改字段名或者将自带方法改为使用SQL来实现相同的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [人大金仓kingbase数据迁移及使用问题](https://blog.csdn.net/weixin_50780863/article/details/117551720)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [mysqlbeetlsql框架适配人大金仓(KingBase)有感](https://blog.csdn.net/a8425/article/details/130160153)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值