当前位置: 首页 > news >正文

jpa适配mysql切换达梦可能的坑

1、liquibase脚本

(1)达梦数据库不支持,修改字段varchar改成blob

<changeSet author="ly" id="v3.0_4_202307111505_101"><renameColumn tableName="PC_SS_ZRQD" oldColumnName="BHNR" newColumnName="BHNR" columnDataType="TEXT"remarks="包含内容(信息项)"/>
</changeSet>

可以增加数据库判断,mysql就是text,达梦就修改成varchar(5000)

<changeSet author="ly" id="v3.0_4_202307111505_101"><preConditions onFail="MARK_RAN"><columnExists tableName="PC_SS_ZRQD" columnName="BHNR"/><dbms type="mysql"/></preConditions><renameColumn tableName="PC_SS_ZRQD" oldColumnName="BHNR" newColumnName="BHNR" columnDataType="TEXT"remarks="包含内容(信息项)"/>
</changeSet>

2、mysql的char(32)和达梦char(32)有区别

mysql如果字段定义是char(32),如果内容是1,数据表存的就是1

达梦如果字段定义是char(32),如果内容是1,数据表存的就是1加31个空格

所以对于变长的字段,达梦建议改成varchar(32)

3、group by区别

(1)下面sql达梦会报错

SELECT t1.mbbh,count(1) from Sqd GROUP BY t1.mbId

mysql不会报错,达梦会报错

达梦的select返回值,必须在group by里面,需要改成

SELECT t1.mbbh,count(1) from Sqd GROUP BY t1.mbId,t1.mbbh

(2)select zd ,count(1) from test

mysql不会报错,达梦会报错

达梦不支持select 字段1,字段2,count(1),不带group by的写法

4、order by区别

SELECT t1.mbbh,count(1) from Sqd GROUP BY t1.mbId,t1.mbbh order by t1.cjsj

这个sql,mysql支持,达梦会报错。使用group by时,达梦的order by字段,必须在select中

SELECT t1.mbbh,max(t1.cjsj) as cjsj,count(1) from Sqd GROUP BY t1.mbId,t1.mbbh order by cjsj

原因:达梦执行过程

1、先执行group by,把结果生成一个临时表

2、order by是对临时表进行排序

所以,如果select 不包含排序字段会报错

5、索引唯一校验不同

达梦数据库索引名称,要全库唯一,不是表维度唯一

例如,在mysql存在数据表, zyxx,   mlxx2个表,对id都建了id_index索引,在mysql不会报错

在达梦数据库会报错

6、distinct和order by 一起使用

达梦  distinct和order by 一起使用, 如果查询结果不包含order by字段会报错

select distinct a from test order by b

mysql不报错,达梦报错。

达梦语法:select distinct a,b from test order by b

7、liquibase的text字段

text在myql库中,建表时字段类型是text, 在达梦数据库建表时是clob类型。

如果字段查询用到了in、like等,达梦的clob在jpa中不支持,会报类型错误。 mysql不会报错

http://www.lryc.cn/news/442277.html

相关文章:

  • 922. 按奇偶排序数组 II 双指针 力扣
  • Vue接入高德地图并实现基本的路线规划功能
  • linux网络编程4
  • Spring模块详解Ⅳ(Spring ORM和Spring Transaction)
  • 深度图可视化显示(kitti)
  • 【Kubernetes知识点】HPA如何控制不同的资源实现自动扩缩容?
  • adb devices不显示连接设备怎么解决
  • 经典sql题(一)求连续登录不少于三天用户
  • 2024java面试-软实力篇
  • 「OC」present和push操作区别以及混合推出的实现
  • 【高分系列卫星简介】
  • 八股文-多线程、并发
  • xtu oj 折纸
  • 传知代码-多示例AI模型实现病理图像分类
  • Java知识点小结3:内存回收
  • LeetCode746:使用花费最小爬楼梯
  • 列表、数组排序总结:Collections.sort()、list.sort()、list.stream().sorted()、Arrays.sort()
  • 【资料分析】刷题日记3
  • 基于SpringBoot+Vue的商场停车场管理系统
  • 4. 密码协议
  • 基于嵌入式的智能物流柜( 触摸屏/0.96寸oled屏)
  • VSCode创建C++项目和编译多文件
  • 7个提升网站分页体验的 CSS 和 JavaScript 代码片段
  • C++——用带有默认参数的函数实现,求两个整数或三个整数中的最大数。
  • 对商品分类系统的若干问题的思考
  • javascript中Number 类型 在实际开发中常用的一些操作方法
  • 部分解决FDTD安装后,matlab指令fopen报错
  • [python3] 处理函数的重试
  • 鸿蒙开发之ArkTS 界面篇 一
  • 嵌入式Linux学习笔记(6)-线程处理、线程同步、线程池(c语言实现)