MySQL → 达梦数据库(DM8)改造清单(适配信创 ARM / 鲲鹏、x86,Java 项目通用)

达梦语法高度兼容 MySQL,但不是 100% 兼容,分 5 大块:SQL 语法、函数、分页、数据类型、连接驱动、配置、特殊功能。

环境背景:你现有两套环境 CentOS7 x86、麒麟 V10 aarch64,达梦同时支持两种架构。

一、驱动 & 连接串(最先改,Java 项目)

1. Maven 依赖替换

MySQL

xml

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.xx</version>
</dependency>

达梦 DM8

xml

<dependency>
    <groupId>com.dameng</groupId>
    <artifactId>DmJdbcDriver18</artifactId>
    <version>8.1.3.xxx</version>
</dependency>

注意:私服要有达梦驱动 jar,达梦官方不开源,中央仓库不存在。

2. JDBC URL、驱动类

MySQL:

plaintext

jdbc:mysql://ip:3306/dbname?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver

达梦:

plaintext

jdbc:dm://ip:5236/DATABASE?zeroDateTimeBehavior=convertToNull
driver-class-name: dm.jdbc.driver.DmDriver

端口默认 5236,不是 3306!

3. 数据库概念差异(大坑)

MySQL:数据库database 达梦:实例 -> 模式 (SCHEMA)

  • MySQL 创建 database → 达梦一般创建用户(用户 = 模式)
  • 不要习惯写 use db;,MyBatis 里表名尽量带上模式名 SCHEMA.TABLE

二、分页语法(最常见改造点)

MySQL

sql

select * from user limit 10,20;

达梦两种写法

  1. 兼容写法(推荐,不用改代码)

sql

select * from user limit 20 offset 10;
  1. 达梦原生 rownum(类似 Oracle)

sql

select * from (select t.*,rownum rn from user t where rownum <=30) where rn>10;

MyBatis-Plus:新版本已适配达梦分页方言,只需更换数据库方言。

三、常用函数不兼容清单(高频踩坑)

表格

MySQL 函数 达梦替代方案
ifnull(col,val) nvl(col,val);达梦也兼容 ifnull,优先 nvl
if(条件,a,b) decode(条件,1,a,b) / case when
date_format(now(),'%Y-%m-%d') to_char(sysdate,'yyyy-mm-dd')
now() / sysdate() sysdate
curdate() trunc(sysdate)
concat_ws(',',a,b,c) concat + case,达梦无 concat_ws
find_in_set(val,strlist) 需要自定义函数实现,达梦原生没有
group_concat() wm_concat()(注意:返回 clob,程序要处理)
substring_index 无原生函数,需自定义

重点预警:group_concat 是迁移重灾区

四、数据类型差异

表格

MySQL 达梦对应 注意事项
VARCHAR(n) VARCHAR(n) 字符单位,达梦默认按字符,和 MySQL8 一致
TINYINT (1) 布尔 TINYINT / BIT Mybatis 布尔映射注意
DATETIME DATETIME 支持;0000-00-00 达梦不允许!!
TIMESTAMP TIMESTAMP 范围不一样
TEXT TEXT / CLOB 大文本推荐 CLOB
BIGINT BIGINT 兼容

致命坑: MySQL 允许 '0000-00-00 00:00:00'达梦直接报错。 历史脏数据必须清理,或者程序设置默认值为 null。

五、SQL 语法差异

  1. 自增主键 MySQL:id bigint auto_increment primary key 达梦支持两种:

sql

-- 方式1 兼容auto_increment(推荐迁移使用)
id bigint auto_increment primary key
-- 方式2 序列+触发器(传统模式)
  1. 表别名不能加 as(部分版本兼容,但谨慎)select t.id from user tselect t.id from user as t(Oracle / 达梦风格容易踩坑)

  2. insert ... on duplicate key update 达梦不支持! MySQL 经典幂等插入语句必须改造: 方案:先查询,存在则 update,不存在 insert;或使用 MERGE INTO。

sql

merge into t_user t
using (select ? id,? name from dual) s
on (t.id = s.id)
when matched then update set name=s.name
when not matched then insert(id,name) values(s.id,s.name);
  1. select ... into outfile 达梦不支持,导出用 dexp 工具;导入 dimp。

  2. 注释:# 单行注释达梦不识别,统一改成 --

六、框架层改造(SpringBoot/MyBatis/MyBatis-Plus)

  1. 数据库方言
  • MyBatis-Plus:

yaml

mybatis-plus:
  configuration:
    db-config:
      db-type: dm

旧项目如果自定义分页插件,必须适配达梦分页。

  1. 字段名大小写
  • MySQL 默认不区分表名字段大小写
  • 达梦:创建不加双引号默认大写!

sql

-- 建表不加"",字段存为大写
create table t_user(name varchar(100));
-- 查询小写name会找不到,必须大写或者规范写法
select NAME from t_user;

最佳实践:建表脚本统一大写,或者创建时加双引号保留大小写。

  1. 保留关键字 USER、LEVEL、TYPE、POSITION 等很多关键字,字段名尽量避免,或者用双引号包裹 "TYPE"

七、事务、锁、SQL 特殊行为

  1. MySQL 默认隔离级别 REPEATABLE-READ;达梦默认也是,但锁机制和 MVCC 细节不同。
  2. MySQL limit 可以 update/delete;达梦 update ... limit 不支持,需要改写。

sql

-- MySQL
delete from t_user limit 10;
-- 达梦改写
delete from t_user where id in (select id from t_user limit 10);

八、运维 & 脚本改造

  1. 备份工具 mysqldump → dexp mysqlsource → dimp
  2. 权限语句 grant all on db.* to user 语法不同,达梦按模式授权
  3. 没有 show databases/show tables 查询库:select distinct table_name,owner from dba_tables

九、简易迁移实施顺序(落地步骤)

  1. 替换 JDBC 驱动、连接串、测试连通性
  2. DDL 脚本改造:自增、字段默认时间、移除 #注释
  3. 检索项目 SQL,重点整改:
    • limit 分页
    • group_concat
    • insert ... on duplicate key
    • date_format、if、find_in_set
  4. 处理日期 0000-00-00 脏数据
  5. MyBatis 分页方言适配
  6. 功能全量回归测试
  7. 存储过程 / 触发器(如有)重点改造,语法差异巨大

十、环境额外提醒(信创 ARM)

银河麒麟 aarch64 部署达梦:

  • 必须下载 DM8 aarch64 安装包
  • JDK 也要 aarch64 版本,否则驱动异常
  • 达梦安装、初始化实例参数和 x86 大体一致,但安装包不能混用
Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐