Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >达梦数据库适配问题

达梦数据库适配问题

作者头像
彼岸舞
发布于 2020-09-30 02:41:17
发布于 2020-09-30 02:41:17
2.4K00
代码可运行
举报
运行总次数:0
代码可运行

达梦数据库适配采坑记

达梦数据库适配采坑记

问题一

问题描述:

字段内容超长错误:

问题详解:

达梦数据库和Oracle同样,对字段的长度有严格的规范,当然Mysql也是有的,但是默认是不启用的,哪怕超出了,也会自动扩容,但是Oracle和达梦是不会的;

解决方案:

方案一:

对数据库的字段长度进行变更;

方案二:

变更数据类型;

方案三:

约束字段长度,或者进行截取处理

问题二:

问题描述:

语句分析错误,不识别[`]符号

问题详解:

在Mysql中[`]符号是为了防止和Mysql的系统字段冲突,标识这个一个普通字段,但是在达梦数据库中,不识别这个符号;

解决方案:

方案一:

采用MyBatis的拦截器对SQL进行拦截处理;

方案二:

XML中的SQL里面的[`]符号进行删除替换(推荐);

问题三:

问题描述:

不是GROUP by 表达式

问题详解:

因为在Oracle和达梦中查询字段必须在分组中出现,所以报错

解决方案:

方案一:

修改代码,去掉Sql中查询的不是分组的字段,通过代码二次查询实现;

问题四:

问题描述:

问题详解:

解决方案:

方案一:

案例:

问题五:

问题描述:

on duplicate key update语法分析错误

问题详解:

属于Mysql专用语法,在Oracle和达梦中是不支持的

解决方案:

方案一:

使用Merge修改(不推荐)

案例:

修改前: insert into sys_logininfo(info_id,infp_name) values(1,2) on duplicate key update info_id=2,infp_name=’aaa’; 修改后: merge into sys_logininfo t1 using( select 1 info_id,2 infp_name from dual ) t2 on (t1.info_id=t2.info_id) WHEN MATCHED THEN update set info_id=2,infp_name=’aaa’ WHEN NOT MATCHED THEN INSERT VALUES (1,2);

使用详解:

https://blog.csdn.net/jackpk/article/details/50336941

遗留问题:

在使用druid连接池时,报了一个错,但是并不影响

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
com.alibaba.druid.sql.parser.ParserException: syntax error, error in :'
    MERGE INTO sys_logininfo t1 US', expect MERGE, actual IDENTIFIER pos 82, line 1, column 1, token IDENTIFIER MERGE

方案二:

通过代码拆分insertOrUpdate 拆分为insert和update

问题六:

问题面熟:

前端展示空白,后端没有报错

样例:

问题详解:

因为Mysql迁移到了达梦,所以字段全部由小写转换为大写,本身返回Bean是没有问题的,但是一些特殊的SQL返回的是List所以结果Key全部为大写,所以前端调用时为小写,所以无法展示;

解决方案:

方案一:

前端修改代码;

方案二:

定义一个VO,把后端的返回的List,转成定义的VO,返回前端;

问题七:

问题描述:

达梦数据库concat函数不认识[“]符号

问题详解:

在Mysql中无论是[‘][“]都是识别的,但是在达梦中只识别[‘];

解决方案:

方案一:

用[‘]替换项目中的[“];

样例:

修改前: select * from aa where a like CONCAT(“%”,”龙”,”%”); 修改后: select * from aa where a like CONCAT(‘%’,’龙’,’%’);

问题八:

问题描述:

达梦数据库查询列别名时使用[‘’]包裹,是会报错的

问题详解:

达梦数据库在做关键字区分时采用[“”]包裹

解决方案:

方案一:

采用[“”]替换[‘’]

样例:

不带关键字 修改前: select aa as ‘a’ from aaa; 修改后 select aa as a from aaa; 带关键字 修改前: select aa as ‘index’ from aaa; 修改后: select aa as “index” from aaa;

问题九:

问题描述:

使用concat直接包裹字段,会报错,无法解析的表达式

问题详解:

达梦不支持无条件的拼接

解决方案:

方案一:

去掉concat

样例:

修改前: select concat(aaa) as a from aa; 修改后: select aaa as a from aa;

作者:彼岸舞

时间:2020\06\23

内容关于:达梦数据库

本文属于作者原创,未经允许,禁止转发

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-06-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
2021-04-04:给定一个非负数组arr,和一个正数m的最大值。
2021-04-04:给定一个非负数组arr,和一个正数m。 返回arr的所有子序列中累加和%m之后的最大值。
福大大架构师每日一题
2021/04/04
9240
2021-04-04:给定一个非负数组arr,和一个正数m的最大值。
2021-12-01:给定一个正数数组arr,代表每个人的体重。给
2021-12-01:给定一个正数数组arr,代表每个人的体重。给定一个正数limit代表船的载重,所有船都是同样的载重量。
福大大架构师每日一题
2021/12/01
2450
2022-01-11:给定一个正数数组arr长度为n、正数x、正数y
2022-01-11:给定一个正数数组arr长度为n、正数x、正数y。 你的目标是让arr整体的累加和<=0, 你可以对数组中的数num执行以下三种操作中的一种,且每个数最多能执行一次操作 : 1.不变; 2.可以选择让num变成0,承担x的代价; 3.可以选择让num变成-num,承担y的代价。 返回你达到目标的最小代价。 数据规模 : 面试时面试官没有说数据规模。 来自微软面试。 答案2022-01-11: 贪心。从大到小排序。 x>=y时,就只执行y操作,没有x操作。 x<y时,先执行y操作,再执行
福大大架构师每日一题
2022/01/11
4280
2021-06-27:给定一个正数数组arr,代表若干人的体重
2021-06-27:给定一个正数数组arr,代表若干人的体重。再给定一个正数limit,表示所有船共同拥有的载重量。每艘船最多坐两人,且不能超过载重,想让所有的人同时过河,并且用最好的分配方法让船尽量少。返回最少的船数。
福大大架构师每日一题
2021/06/27
3600
2021-06-27:给定一个正数数组arr,代表若干人的体重
2021-02-25:给定一个正数数组arr,请把arr中所有的数分成两个集合。
2021-02-25:给定一个正数数组arr,请把arr中所有的数分成两个集合。如果arr长度为偶数,两个集合包含数的个数要一样多;如果arr长度为奇数,两个集合包含数的个数必须只差一个。请尽量让两个集合的累加和接近,返回最接近的情况下,较小集合的累加和。
福大大架构师每日一题
2021/02/25
3190
2021-02-25:给定一个正数数组arr,请把arr中所有的数分成两个集合。
2021-02-15:给定一个整型数组arr,代表数值不同的纸牌排成一条线。,
2021-02-15:给定一个整型数组arr,代表数值不同的纸牌排成一条线。玩家A和玩家B依次拿走每张纸牌,规定玩家A先拿,玩家B后拿。但是每个玩家每次只能拿走最左或最右的纸牌,玩家A和玩家B都绝顶聪明。请返回最后获胜者的分数。
福大大架构师每日一题
2021/02/15
4420
2021-02-15:给定一个整型数组arr,代表数值不同的纸牌排成一条线。,
2022-04-02:你只有1*1、1*2、1*3、1*4,四种规格的砖块。 你想铺满n行m列的区域,规则如下: 1)不管那种规格的砖,都只能横着摆
3)区域内部(不算区域整体的4条边界),不能有任何砖块的边界线(从上一直贯穿到下)。
福大大架构师每日一题
2022/04/02
5110
2021-11-22:给定一个正数数组arr,表示每个小朋友的得
任何两个相邻的小朋友,如果得分一样,怎么分糖果无所谓,但如果得分不一样,分数大的一定要比分数少的多拿一些糖果;
福大大架构师每日一题
2021/11/22
2120
2021-04-05:给两个长度分别为M和N的整型数组...
2021-04-05:给两个长度分别为M和N的整型数组nums1和nums2,其中每个值都不大于9,再给定一个正数K。 你可以在nums1和nums2中挑选数字,要求一共挑选K个,并且要从左到右挑。返回所有可能的结果中,代表最大数字的结果。
福大大架构师每日一题
2021/04/05
4860
2021-04-05:给两个长度分别为M和N的整型数组...
2021-07-27:给定一个数组arr,长度为N,arr中的值只有1
2021-07-27:给定一个数组arr,长度为N,arr中的值只有1,2,3三种。arri == 1,代表汉诺塔问题中,从上往下第i个圆盘目前在左;arri == 2,代表汉诺塔问题中,从上往下第i个圆盘目前在中;arri == 3,代表汉诺塔问题中,从上往下第i个圆盘目前在右。那么arr整体就代表汉诺塔游戏过程中的一个状况。如果这个状况不是汉诺塔最优解运动过程中的状况,返回-1。如果这个状况是汉诺塔最优解运动过程中的状况,返回它是第几个状况。
福大大架构师每日一题
2021/07/27
1.2K0
2021-07-27:给定一个数组arr,长度为N,arr中的值只有1
2022-01-12:给定一个正数数组arr,长度为n,下标0~n-1, a
中间位置i需要达标,达标的条件是 : arri-1 > arri 或者 arri+1 > arri哪个都可以。
福大大架构师每日一题
2022/01/12
3690
2021-10-26:给定一个数组arr,arr[i] = j,表示第i号试题的
2021-10-26:给定一个数组arr,arri = j,表示第i号试题的难度为j。给定一个非负数M。想出一张卷子,对于任何相邻的两道题目,前一题的难度不能超过后一题的难度+M。返回所有可能的卷子种数。
福大大架构师每日一题
2021/10/26
3280
2021-04-29:给定一个数组 arr,代表一排有分数的气球。每打爆一
2021-04-29:给定一个数组 arr,代表一排有分数的气球。每打爆一个气球都能获得分数,假设打爆气 球 的分数为 X,获得分数的规则如下: 1)如果被打爆气球的左边有没被打爆的气球,找到离被打爆气球最近的气球,假设分数为 L;如果被打爆气球的右边有没被打爆的气球,找到离被打爆气球最近的气球,假设分数为 R。 获得分数为 L_X_R。 2)如果被打爆气球的左边有没被打爆的气球,找到离被打爆气球最近的气球,假设分数为 L;如果被打爆气球的右边所有气球都已经被打爆。获得分数为 L_X。 3)如果被打爆气球的左边所有的气球都已经被打爆;如果被打爆气球的右边有没被打爆的 气球,找到离被打爆气球最近的气球,假设分数为 R;如果被打爆气球的右边所有气球都 已经 被打爆。获得分数为 X_R。 4)如果被打爆气球的左边和右边所有的气球都已经被打爆。获得分数为 X。目标是打爆所有气球,获得每次打爆的分数。通过选择打爆气球的顺序,可以得到不同的总分,请返回能获得的最大分数。【举例】arr = {3,2,5} 如果先打爆3,获得3_2;再打爆2,获得2_5;最后打爆5,获得5;最后总分21 如果先打爆3,获得3_2;再打爆5,获得2_5;最后打爆2,获得2;最后总分18 如果先打爆2,获得3_2_5;再打爆3,获得3_5;最后打爆5,获得5;最后总分50 如果先打爆2,获得3_2_5;再打爆5,获得3_5;最后打爆3,获得3;最后总分48 如果先打爆5,获得2_5;再打爆3,获得3_2;最后打爆2,获得2;最后总分18 如果先打爆5,获得2_5;再打爆2,获得3_2;最后打爆3,获得3;最后总分19 返回能获得的最大分数为50。
福大大架构师每日一题
2021/05/04
3380
2021-04-29:给定一个数组 arr,代表一排有分数的气球。每打爆一
2021-04-07:给定一个非负数组arr,长度为N,那么有N-1种方案可以把arr切成左右两部分
2021-04-07:给定一个非负数组arr,长度为N,那么有N-1种方案可以把arr切成左右两部分,每一种方案都有,min{左部分累加和,右部分累加和},求这么多方案中,min{左部分累加和,右部分累加和}的最大值是多少? 整个过程要求时间复杂度O(N)。
福大大架构师每日一题
2021/04/07
3540
2021-04-07:给定一个非负数组arr,长度为N,那么有N-1种方案可以把arr切成左右两部分
2022-03-18:arr数组长度为n, magic数组长度为m 比如 arr = { 3, 1, 4, 5, 7 },如果完全不改变arr中的值, 那么收益
比如 arr = { 3, 1, 4, 5, 7 },如果完全不改变arr中的值,
福大大架构师每日一题
2022/03/18
8900
2023-08-30:用go语言编写。两个魔法卷轴问题。 给定一个数组arr,其中可能有正、负、0, 一个魔法卷轴可以把arr中
5.调用函数mustOneScroll(arr, 0, n-1),返回一个整数,并赋值给变量p2。
福大大架构师每日一题
2023/09/01
2110
2023-08-30:用go语言编写。两个魔法卷轴问题。 给定一个数组arr,其中可能有正、负、0, 一个魔法卷轴可以把arr中
2021-04-25:给定一个数组arr,和一个正数M,返回在
福大大 答案2021-04-25: 前缀和+左大右小的双端队列。时间太晚了,所以写得简单。 代码用golang编写。代码如下: package main import ( "container/list" "fmt" ) func main() { arr := []int{1, 2, -3, 4, -5} ret := maxSum(arr, 5) fmt.Println(ret) } // O(N)的解法,最优解 func maxSum(arr []int,
福大大架构师每日一题
2021/05/04
3960
2021-04-25:给定一个数组arr,和一个正数M,返回在
2021-06-23:给定一个数组arr,代表每个人的能力值。再给定一个非负数k
2021-06-23:给定一个数组arr,代表每个人的能力值。再给定一个非负数k,如果两个人能力差值正好为k,那么可以凑在一起比赛。一局比赛只有两个人,返回最多可以同时有多少场比赛。
福大大架构师每日一题
2021/06/23
9710
2021-06-23:给定一个数组arr,代表每个人的能力值。再给定一个非负数k
2022-01-15:中心对称数 III。 中心对称数是指一个数字在旋
中心对称数是指一个数字在旋转了 180 度之后看起来依旧相同的数字(或者上下颠倒地看)。
福大大架构师每日一题
2022/01/15
2850
2021-10-18:乘积最大子数组。给你一个整数数组 nums
2021-10-18:乘积最大子数组。给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。力扣152。
福大大架构师每日一题
2021/10/18
2700
推荐阅读
2021-04-04:给定一个非负数组arr,和一个正数m的最大值。
9240
2021-12-01:给定一个正数数组arr,代表每个人的体重。给
2450
2022-01-11:给定一个正数数组arr长度为n、正数x、正数y
4280
2021-06-27:给定一个正数数组arr,代表若干人的体重
3600
2021-02-25:给定一个正数数组arr,请把arr中所有的数分成两个集合。
3190
2021-02-15:给定一个整型数组arr,代表数值不同的纸牌排成一条线。,
4420
2022-04-02:你只有1*1、1*2、1*3、1*4,四种规格的砖块。 你想铺满n行m列的区域,规则如下: 1)不管那种规格的砖,都只能横着摆
5110
2021-11-22:给定一个正数数组arr,表示每个小朋友的得
2120
2021-04-05:给两个长度分别为M和N的整型数组...
4860
2021-07-27:给定一个数组arr,长度为N,arr中的值只有1
1.2K0
2022-01-12:给定一个正数数组arr,长度为n,下标0~n-1, a
3690
2021-10-26:给定一个数组arr,arr[i] = j,表示第i号试题的
3280
2021-04-29:给定一个数组 arr,代表一排有分数的气球。每打爆一
3380
2021-04-07:给定一个非负数组arr,长度为N,那么有N-1种方案可以把arr切成左右两部分
3540
2022-03-18:arr数组长度为n, magic数组长度为m 比如 arr = { 3, 1, 4, 5, 7 },如果完全不改变arr中的值, 那么收益
8900
2023-08-30:用go语言编写。两个魔法卷轴问题。 给定一个数组arr,其中可能有正、负、0, 一个魔法卷轴可以把arr中
2110
2021-04-25:给定一个数组arr,和一个正数M,返回在
3960
2021-06-23:给定一个数组arr,代表每个人的能力值。再给定一个非负数k
9710
2022-01-15:中心对称数 III。 中心对称数是指一个数字在旋
2850
2021-10-18:乘积最大子数组。给你一个整数数组 nums
2700
相关推荐
2021-04-04:给定一个非负数组arr,和一个正数m的最大值。
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验