mysql 与 达梦数据库同时使用
前一段时间因为工作要求,需要用到一个前后端一体,mysql 和 达梦数据库共用的一个单体项目。然后我在网上找了一个demo改了改,改的过程中遇到了一些坑,顺便分享一下。附源码
达梦数据库
达梦数据库的语法和常用的mysql语法有很大的差异。达梦数据库的下载自己去网上找,
我用的是达梦8
创建模式(数据库)
不管创建语句是大小写,创建后名称都为大写
CREATE SCHEMA 模式(库)名 AUTHORIZATION 用户名;
删除模式(数据库)
drop schema 模式(库)名;
切换模式(数据库)
(库名不区分大小写)
set schema 模式(库)名;
达梦建表语句
达梦数据库建表语句 int类型不能有长度,表名及字段名不能加单引号(关键字则必须加单引号不然报错),主键定义语法不同。 这个表里的 identity 字段就是关键字,如果不加单引号执行建表语句报错。
注意:不熟悉达梦数据库的建表语句 可以拿 mysql 的建表语句去让 chatgpt 转换一下。
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
address VARCHAR(255),
avatar VARCHAR(255),
birthday TIMESTAMP,
email VARCHAR(255),
`identity` INT,
is_admin INT,
nickname VARCHAR(255),
password VARCHAR(255),
size INT,
tel VARCHAR(255),
username VARCHAR(255)
);
mysql建表语句对比
identity 在mysql中不算关键字,操作起来不会有问题
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`address` varchar(255) DEFAULT NULL,
`avatar` varchar(255) DEFAULT NULL,
`birthday` datetime(6) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`identity` int(11) DEFAULT NULL,
`is_admin` int(11) DEFAULT NULL,
`nickname` varchar(255) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
`size` int(11) DEFAULT NULL,
`tel` varchar(255) DEFAULT NULL,
`username` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
关键字
如果表中的字段是关键字的话,必须在实体类上加上注解:@TableField(“identity
”) 声明,否则在切换达梦数据库时报数据库字段异常。 注意:双引号中还包了一层反引号。
配置
在使用达梦数据库时,我在代码中使用了 PageHelper 分页插件,因为达梦数据库不兼容。所以要在配置里加一个PageHelper:helperDialect: oracle,如果不加这个会报错。但使用mysql数据源时要去掉。不然也会报错
**如上图配置,用哪个数据库就把那个打开,把不用的注释掉就行。**↑↑↑
代码
因为工作需要,代码中有一些手写的sql,sql中的函数是mysql可用的,达梦不兼容。
这些sql的方法有mybatis-plus自己的方法,我只是给注释掉了,需要的话自己调整代码。
如果放开的话,mysql和达梦数据库可以共用mybatis-plus自带的方法。特殊sql语法除外。
补充一下,我本地达梦数据库关键字是用反单引号包住就能用,但是我切到线上数据源的时候,发现单引号用不了,必须用双引号,可能跟达梦版本有关系。如果反单引号报语法错误,那就在实体类用注解加双引号 @TableField(““identity””)
在这里插入图片描述