一、数据迁移
官方地址下载全量安装包:人大金仓-成为世界卓越的数据库产品与服务提供商
安装后可以转到官方数据迁移教程: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