docker安装达梦数据库最佳实践
达蒙数据库
数据库安装部署
下载地址:
到官网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可兼容)