Skip to content

达梦数据库部署

一、说明

  • 达梦官网

  • 达梦数据库需要购买。 图片

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

二、安装数据库(装前必读)

  • 购买服务后,由对方技术远程安装(若仅试用,可自行在官网下载安装包) 图片

- 2.1 特别注意

注意!注意!注意!

  • 如上图,红框内标记 ② 处:需要特别注意!
  • 如何选择?
  1. 大小写敏感:
    数据库名、表名、字段名、数据,大小写都敏感!
    如果想强制使用小写,则必须加""(表名、字段名都要加)从MySql迁移可能代码改动很大
    例如:select "id","name" from "table_name"

  2. 大小写不敏感 (推荐)
    数据库名、表名、字段名、数据,大小写不敏感!
    这种方法对MySql迁移十分友好,代码改动较小
    但要
    例如:select * from table_name where name='Tom'
    结果会将:tom、Tom、TOm、ToM、TOM 等都查询出来
    若业务需要区分内容大小写,需要自行处理!

  • 另外还有几个参数,数据库初始化后,也无法修改,如下图: 图片

三、数据库迁移

- 3.1 迁移准备

前提:网络互通

  • 需要有一台跳板机(Windows),可以同时访问【原MySql服务】和【达梦数据库】
  1. 登录跳板机,下载达梦数据库的安装包。 图片 下载成功后,解压安装包。 图片

  2. 安装客户端。 装载这个iso 图片 双击 setup.bat 安装 图片 一直“下一步”,来到这一步,“迁移数据”只需要安装客户端 图片 继续一直“下一步”,直到安装完成!

  3. 数据库连接和迁移 安装成功后,得到如下图工具 图片

  • 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”配置映射关系 图片

步骤

  1. 点击“添加”按钮
  2. 源数据类型名:VARCHAR (选项中没有,需要手动输入)
  3. 目的数据类型名:VARCHAR (选择,可输入查询)
  4. 强制为字符存储:是 (选择)
  5. 点击“保存”按钮

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";

官方文档:附录 1 关键字和保留字

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时返回clob

4.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', '');

五、更多文档