前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >达梦数据库适配问题

达梦数据库适配问题

作者头像
彼岸舞
发布2020-09-30 10:41:17
2.1K0
发布2020-09-30 10:41:17
举报

达梦数据库适配采坑记

达梦数据库适配采坑记

问题一

问题描述:

字段内容超长错误:

问题详解:

达梦数据库和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连接池时,报了一个错,但是并不影响

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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 达梦数据库适配采坑记
  • 达梦数据库适配采坑记
  • 问题一
    • 问题描述:
      • 问题详解:
        • 解决方案:
          • 方案一:
          • 方案二:
          • 方案三:
      • 问题二:
        • 问题描述:
          • 问题详解:
            • 解决方案:
              • 方案一:
              • 方案二:
          • 问题三:
            • 问题描述:
              • 问题详解:
                • 解决方案:
                  • 方案一:
              • 问题四:
                • 问题描述:
                  • 问题详解:
                    • 解决方案:
                      • 方案一:
                  • 问题五:
                    • 问题描述:
                      • 问题详解:
                        • 解决方案:
                          • 方案一:
                        • 使用详解:
                          • 遗留问题:
                            • 方案二:
                        • 问题六:
                          • 问题面熟:
                            • 样例:
                          • 问题详解:
                            • 解决方案:
                              • 方案一:
                              • 方案二:
                          • 问题七:
                            • 问题描述:
                              • 问题详解:
                                • 解决方案:
                                  • 方案一:
                              • 问题八:
                                • 问题描述:
                                  • 问题详解:
                                    • 解决方案:
                                      • 方案一:
                                  • 问题九:
                                    • 问题描述:
                                      • 问题详解:
                                        • 解决方案:
                                          • 方案一:
                                      相关产品与服务
                                      云数据库 SQL Server
                                      腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
                                      领券
                                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档