Appearance
达梦数据库部署
一、说明
达梦数据库需要购买。

先给对方提供申请表,如下图(仅供参考)

二、安装数据库(装前必读)
- 购买服务后,由对方技术远程安装(若仅试用,可自行在官网下载安装包)

- 2.1 特别注意
注意!注意!注意!
- 如上图,红框内标记 ② 处:需要特别注意!
- 如何选择?
大小写敏感:
数据库名、表名、字段名、数据,大小写都敏感!
如果想强制使用小写,则必须加""(表名、字段名都要加)从MySql迁移可能代码改动很大
例如:select "id","name" from "table_name"大小写不敏感 (推荐):
数据库名、表名、字段名、数据,大小写不敏感!
这种方法对MySql迁移十分友好,代码改动较小
但要
例如:select * from table_name where name='Tom'
结果会将:tom、Tom、TOm、ToM、TOM 等都查询出来
若业务需要区分内容大小写,需要自行处理!
- 另外还有几个参数,数据库初始化后,也无法修改,如下图:

三、数据库迁移
- 3.1 迁移准备
前提:网络互通
- 需要有一台跳板机(Windows),可以同时访问【原MySql服务】和【达梦数据库】
登录跳板机,下载达梦数据库的安装包。
下载成功后,解压安装包。 安装客户端。 装载这个iso
双击 setup.bat 安装
一直“下一步”,来到这一步,“迁移数据”只需要安装客户端
继续一直“下一步”,直到安装完成!数据库连接和迁移 安装成功后,得到如下图工具

- DM管理工具:连接数据库,创建用户、模式等
- DM数据迁移工具:数据迁移
- 3.2 数据管理
- 打开“DM管理工具”,点击“新建连接”

- 输入连接信息,点击“测试”,测试成功后,点击“连接”按钮

- 可以管理“模式、角色、用户、表空间”等信息

- 3.3 数据迁移
3.3.1 新建工程
打开“DM数据迁移工具”,点击“新建工程”

输入“工程名”,点击“确定”按钮

3.3.2 配置“数据类型映射”
为什么要配置“数据类型映射”
- 由于mysql字符串的长度是以字符为单位,而达梦是以字节为单位,达梦需要配置varchar( char)来兼容mysql
- 不配置的话,有可能在数据太长时,导致迁移失败。
例如:varchar(100),内容100个字符;
迁移到达梦时,实际长度需要x2或x3(英文x2 中文x3),超过100字节,迁移失败。 - 可查看官方文档
- 双击左侧迁移管理的“工程名称”,打开“数据类型映射”,双击“MySQL->DM”配置映射关系

步骤
- 点击“添加”按钮
- 源数据类型名:VARCHAR (选项中没有,需要手动输入)
- 目的数据类型名:VARCHAR (选择,可输入查询)
- 强制为字符存储:是 (选择)
- 点击“保存”按钮
3.3.3 迁移数据
在“迁移”文件夹,右键“新建迁移任务”

输入“迁移名称”,点击“确定”按钮

打开“迁移任务”,点击“下一步”按钮

选择“MySQL ==> DM”,点击“下一步”按钮

输入“Mysql数据库信息”【主机名、端口、用户名、口令】
点击“刷新”按钮,可选择“数据库名”
注意
- 若该用户,未分配默认的“mysql”数据库权限,会提示连接失败,也不显示“数据库名”
- 这时,该提示可以忽略,需要手动输入自己的数据库名
点击“下一步”,输入“达梦数据库信息”,继续点击“下一步按钮”
若连接信息错误,下一步会报错提示!
配置迁移选项

说明
- 选中“保持对象名大小写”
如果不选择,迁移完成后,数据库名、字段名都会默认使用大写。 - 取消选中“使用默认数据类型映射关系”
选中,会使用默认的映射关系
不选中,使用[3.3.2]中配置的“数据类型映射”关系 - 其他配置默认即可
点击“配置类型映射关系”按钮,可查看当前使用的映射关系

点击“下一步”,配置“复制对象”

说明
- 源库:MySQL的数据库名
- 目标模式:达梦的模式名
- 迁移对象:多选框选择要迁移数据库
- 在达梦数据库中,无需创建模式,迁移任务会自动创建!
- 点击“下一步”,配置“复制表/函数”等信息

说明
- 使用默认配置即可,基本不需修改
- 选择需要迁移的表,点击“选择”按钮,表示全选
后面两边步,直接点击“下一步”,最后点击“完成”!

这时,迁移任务自动开始,等待任务完成!

说明
- 任务完成后,会出现上图“[END]执行完成......”的提示,表示迁移成功!
- 若迁移过程中出现错误,在“任务失败”选项卡会有详细错误信息
根据错误信息处理后,可重新执行!
- 迁移任务自动保存,可以重新选择,重新执行数据迁移的整个过程!
- 至此,数据迁移完成!
四、本地项目改造
- 4.1 配置pom引入达梦依赖
- 添加达梦数据库数据连接驱动(DmJdbcDriver18)的依赖。
xml
<!-- 达梦 -->
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmJdbcDriver18</artifactId>
<version>8.1.3.140</version>
</dependency>说明
- 使用 JDBC 驱动时,需要使用和服务器端 DM 数据库相近的版本,相隔时间太久的版本,可能出现部分功能无法适配的情况。
- 达梦的 JDBC 驱动目前有三个版本: DmJdbcDriver16.jar 、 DmJdbcDriver17.jar 和 DmJdbcDriver18.jar ,分别对应 jdk1.6 、 jdk1.7 和 jdk1.8 及以上版本。
- 详见官方文档
- 4.2 修改数据库连接
- application.yml文件中,修改数据库连接信息。
- 把原来的 mysql 连接信息,改为达梦数据库连接信息。
yaml
spring:
datasource:
driver-class-name: dm.jdbc.driver.DmDriver
url: jdbc\:dm\://xxx.xxx.xxx.xxx\:5236/模式名?serverTimezone\=Hongkong&useUnicode\=true&characterEncoding\=UTF-8
username: 用户名
password: 密码properties
#数据库配置
spring.datasource.driver-class-name=dm.jdbc.driver.DmDriver
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.jdbc-url=jdbc\:dm\://xxx.xxx.xxx.xxx\:5236/模式名?serverTimezone\=Hongkong&useUnicode\=true&characterEncoding\=UTF-8
spring.datasource.username=用户名
spring.datasource.password=密码- 4.3 修改代码中SQL语句
注意:
- 连接达梦数据库后,启动项目并测试,遇到报错的情况,每个去单独处理
- 以下遇到的已知问题,必须修改
- 更多问题,根据代码测试后修改,常见错误会继续补充
4.3.1 表名、字段名,不能使用``符号
补充说明
- 新版本的DM数据库,已经实现了支持``符号
- 需要在安装数据库服务时,配置dm.ini兼容mysql(建议找官方技术支持,目前没有相关配置文档)
mysql
#MySQL
SELECT `id`,`name` FROM `table_name`;
#或
SELECT id,name FROM table_name;dm
#达梦
SELECT "id","name" FROM "table_name";
#或
SELECT id,name FROM table_name;4.3.2 字符串引用,只能使用单引号,不能使用双引号
mysql
#MySQL
SELECT * FROM table_name WHERE name LIKE CONCAT("%", "abc", "%");
#或
SELECT * FROM table_name WHERE name LIKE CONCAT('%','abc','%');dm
#达梦
SELECT * FROM table_name WHERE name LIKE CONCAT('%','abc','%');4.3.3 关键字/保留字,必须加双引号
mysql
#MySQL
SELECT context FROM table_name;
SELECT user.* FROM table_name user;dm
#达梦(其中user和context是达梦内置关键字)
SELECT "context" FROM table_name;
SELECT "user".* FROM table_name "user";4.3.4 GROUP_CONCAT 函数不支持,替换成 LISTAGG/WM_CONCAT
补充说明
- 查询WM_CONCAT_LOB参数,指定 wm_concat 函数的返回值类型 0:varchar 类型;1:CLOB 类型
SELECT para_name,para_value FROM v$dm_ini WHERE para_name LIKE '%WM_CONCAT_LOB%';
- 只有该配置=0才可使用WM_CONCAT,否则mybatis返回clob类型,还需要特殊处理
- 该配置允许修改,但需要重启服务,见上图
mysql
#MySQL
SELECT age,GROUP_CONCAT(name) concat_name FROM table_name GROUP BY age;dm
#达梦
SELECT age,LISTAGG(name,',') concat_name FROM table_name GROUP BY age;
#注意:LISTAGG返回varchar;LISTAGG2返回clob
#或
SELECT age,WM_CONCAT(name) concat_name FROM table_name GROUP BY age;
#注意:WM_CONCAT_LOB=0时返回varchar;WM_CONCAT_LOB=1时返回clob4.3.5 STR_TO_DATE 函数不支持,替换成 TO_DATE
mysql
#MySQL
SELECT STR_TO_DATE('2025/12/25 10:30:00', '%Y/%m/%d %H:%i:%s');dm
#达梦
SELECT TO_DATE('2025-12-25 10:30:00', 'YYYY/MM/DD HH24:MI:SS');说明
- 参数1:日期字符串
合法的 DATE 格式为年月日、月日年和日月年三种,各部分之间可以有间隔 (".","-","/") 或者没有间隔符;合法的 TIME 格式为时分和时分秒两种,间隔符为":" - 参数2:格式符
常见的格式符,如下图所示
完整版请打开官方文档;搜索[表8.3.4 格式符]
4.3.6 CONCAT不支持一个参数
mysql
#MySQL
SELECT CONCAT('abc');dm
#达梦
SELECT CONCAT('abc', '');