达蒙数据库
数据库安装部署
下载地址:产品下载 | 达梦数据库
安装博客地址:安装前准备 | 达梦技术文档
到官网docker部署那一章节,下载镜像tar包,上传到服务器上后,运行下面的命令
docker安装启动脚本:
docker run -d -p 5236:5236 \
--restart=always \
--name dm8_01 \
--privileged=true \
-e CASE_SENSITIVE=0 \
-e UNICODE_FLAG=1 \
-e LENGTH_IN_CHAR=1 \
-e PAGE_SIZE=16 \
-e LD_LIBRARY_PATH=/opt/dmdbms/bin \
-e INSTANCE_NAME=dm8_01 \
-v /data/dm8_01:/opt/dmdbms/data \
dm8_single:v8.1.2.128_ent_x86_64_ctm_pack4
说明:
-
CASE_SENSITIVE=0 设置大小写不敏感
-
LENGTH_IN_CHAR=1 VARCHAR 类型对象的长度以字符为单位
-
UNICODE_FLAG 字符集 (0),可选值: 0[GB18030], 1[UTF-8], 2[EUC-KR]
备注:安装好达梦数据库后,需要新建库名、新建用户、分配这个用户的权限和所拥有的库
mysql迁移到达梦
-
dm.ini
修改兼容参数在迁移数据之前,需要修改 DM 数据库参数,修改兼容参数为兼容 MySQL 数据库 COMPATIBLE_MODE=4 ,重启数据库服务使其生效即可
-
迁移工具设置映射字段修改
数据类型映射 -> MySQL/DM -> 源数据类型名(DOUBLE)映射到 目的数据类型名(VARCHAR)
java适配
添加驱动
此驱动可直接网络下载到本地maven仓库
<!-- 添加 达梦数据库 驱动-->
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmJdbcDriver18</artifactId>
<version>8.1.2.79</version>
</dependency>
jpa服务
event
、app
、fileupload
服务
- 进入到本地的安装目录
dmdbms8/drivers/jdbc/dialect
,上传对应版本的方言包到本地仓库
mvn install:install-file -DgroupId=com.dameng -DartifactId=DmDialect-for-hibernate -Dversion=5.4 -Dpackaging=jar -Dfile=DmDialect-for-hibernate5.4.jar
-
配置文件添加对应的方言配置
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.DmDialect spring.jpa.database-platform=org.hibernate.dialect.DmDialect
mysql和达梦数据库的差别
达梦开发指南
https://eco.dameng.com/document/dm/zh-cn/sql-dev/practice-single-table.html
关键字
-
查询字段不能是admin、damain、order,否则报错
-
达梦不支持LocalDateTime,需要适配(两种方案)
-
第一种:common包中添加适配类
-
第二种:使用最新的达梦在线驱动依赖包并去掉druid依赖
-
语法兼容
-
创建表的时候,不支持在列的后面直接加 comment 注释,使用 COMMENT ON IS 代替,如:
COMMENT ON TABLE xxx IS xxx COMMENT ON COLUMN xxx IS xxx
-
字段不支持反引号``包裹(mysql可兼容)
-
查询字段不允许双引号包裹,如,
SELECT vc_direct AS "direct"
(mysql可兼容) -
like "%xxx%"
会报错,使用单引号包裹like '%xxx%'
(mysql可兼容) -
date_sub(date,INTERVAL expr type), expr 在达梦中需要加单引号(mysql可兼容)
如:
date_sub(now(),interval '6' month)
-
达梦数据库保错‘-2685:试图在blob或者clob列上排序或比较’,达梦数据库对大字段排序默认是会报错的,需要修改配置,执行一下语句修改即可
sp_set_para_value(1,‘ENABLE_BLOB_CMP_FLAG’,1); -
if语句不支持带有表达式的值(如:if(?3 is not null, direct = ?3, 1 = 1)),所以需要转换成
if(?3 is not null, if(direct = ?3, 1, 0), 1)这样;(mysql可兼容)