一、数据迁移

官方地址下载全量安装包:人大金仓-成为世界卓越的数据库产品与服务提供商

安装后可以转到官方数据迁移教程:3. MySQL数据库移植实战 — KingbaseES产品手册

作者这里使用的是KDTS离线迁移方式。

二、maven引入kingbase8驱动

作者使用的离线引入方式

驱动下载地址:人大金仓-成为世界卓越的数据库产品与服务提供商

	<!--人大金仓-->
		<dependency>
			<groupId>com.kingbase8</groupId>
			<artifactId>kingbase8</artifactId>
			<version>8.6.0</version>
			<scope>system</scope>
			<systemPath>${project.basedir}/lib/kingbase8-8.6.0.jar</systemPath>
		</dependency>

三、基础配置

  数据库连接配置:

spring:
    application:
        name: service
    datasource:
        driver-class-name: com.kingbase8.Driver
        url: jdbc:kingbase8://ip:54321/{数据库名}
        username: ***
        password: ***

四、迁移遇到的问题

先附上官方解决兼容问题文档地址:KingbaseES与MySQL的兼容性说明 — KingbaseES产品手册

1、表名冲突

人大金仓数据库中默认有一些表格,会与自己建的项目表名冲突,作者这里遇到了sys_user和sys_config这两个表。

处理方式有两种,一种是修改kingbase的配置,然后重启数据库,方式可以自行查阅。我这里为了不改变默认配置,自己修改了表名解决了冲突。

2、关键字

报错信息:CONNECT BY clause required in this query block

字段level是人大金仓的关键字,sql语句需要增加双引号,mybatis-plus可以在实体类增加注解。

    @TableField("\"level\"")
    private Integer level;
3、分组查询报错

报错信息:column "c.name" must appear in the GROUP BY clause or be used in an aggregate function

PGSQL的分组函数是比较严格,select字段必须得存在于group子句、或者聚合函数中才行。

原sql语句,会提示上面的错误信息。

SELECT
	b.id,
	c.name AS c_name 
FROM
	book b 
LEFT JOIN catalog c ON c.id = b.catalog_id 
WHERE
	is_delete = 0 
GROUP BY
	b.id

最简单的方式是增加个聚合函数:

SELECT
	b.id,
	MAX(c.name) AS c_name 
FROM
	book b 
LEFT JOIN catalog c ON c.id = b.catalog_id 
WHERE
	is_delete = 0 
GROUP BY
	b.id

五、注意事项

1、人大金仓数据库会默认把空字符串当作null处理,可以通过修改数据库关闭该情况。

在kingbase.config配置文件中修改ora_input_emptystr_isnull=off

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐