ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

DM达梦数据库遇过的坑

DM达梦数据库遇过的坑 最近在做信创环境的项目 原项目用的MySQL数据库转到DM数据库中好多SQL都出现了问题为方便以后开发将遇到过的问题在这里做个记录以后会不断更新。转换丢失警告情形一出错原因原SQL里使用了CAST(id as char)函数试图将int类型的id转换成char类型但是char类型的长度小于int类型所以报错。解决思路换成转换varchar类型长度更大结果不出错了。参考资料https://blog.51cto.com/jackin/5479327情形二出错原因convert(decimal(10,4), f_num/10000) f_num。字段定义长度(12,0)定义的转换长度小于数据的长度。解决思路转换后的长度改为16,4。convert(decimal(16,4), f_num/10000) f_num参考资料https://blog.csdn.net/weixin_45626288/article/details/132104224排序null空值始终排在前边原因DM有一个参数ORDER_BY_NULLS_FLAG默认值是00的话就是null始终在最前边不管正序倒序。解决思路改变参数ORDER_BY_NULLS_FLAG的值0 表示 NULL 值始终在最前面返回1 表示ASC 升序排序时 NULL 值在最后返回DESC 降序排序时 NULL 值在最前面返回在参数等于 1的情况下NULL 值的返回与 ORACLE 保持一致2 表示 ASC 升序排序时 NULL 值在最前面返回DESC 降序排序时 NULL 值在最后返回在参数等于 2 的情况下NULL 值的返回与MYSQL 保持一致参考资料https://blog.csdn.net/qq_27466979/article/details/127084933存在集函数原因项目里有这样一个SQLselect 字段1,2,3...(select last_price from trading where trade_date MIN(t.trade_date)) as pricefrom trading t where 条件1,2,3...group by CONCAT(YEAR(t.trade_date), WEEK(t.trade_date))要查询每周第一天的last_price执行时报存在集函数的错原来是在where条件里使用了MIN()函数DM不允许这样使用原因不明如有错误欢迎指正。解决思路将MIN()函数改成了一个子查询虽然比以前复杂了很多查的也慢了但是好在能执行了。接口返回数据的时间与数据库中的时间不一致项目中有个查询接口返回的列表中某个时间类型的字段与数据库中执行SQL的日期差一天并且不是所有数据都差一天。出错原因时区问题字段存储的是时间戳用FROM_UNIXTIME()函数转换格式返回给前台。由于在dm_svc.conf中错误的配置了TIME_ZONE(8:00)与数据库的时区不同所以出现了这个问题。把该配置删掉就解决了。MySQL数据库同理在jdbc.url中可以配置时区参考资料https://www.cnblogs.com/yangtsecode/p/12088284.htmldm_svc.conf使用相关资料https://blog.csdn.net/Cj12315/article/details/125383230https://www.bilibili.com/read/cv18061917/中文按汉语拼音排序现象期望中文字段zw按照汉语拼音排序MySQL中使用order by CONVERT(zw, USING gbk) COLLATE gbk_chinese_ci函数DM报错解决方法DM中有不同的函数来实现按汉语拼音排序order by NLSSORT(zw, ‘NLS_SORTSCHINESE_PINYIN_M’)参考资料https://blog.csdn.net/lxm13613538669/article/details/126269847字段名与系统关键字冲突现象诸如type top themetime等字段查询时直接select typetop会报错用这些字段排序时也会报错。解决办法给字段名别名也需要加上双引号select s.“type” as “type” from user s order by “top”参考资料https://blog.csdn.net/qq_43421954/article/details/135018898达梦数据库 -2723: 仅当指定列列表且SET IDENTITY_INSERT为ON时才能对自增列赋值现象t_user表的主键id设置为自增的insert数据时给id设置了值 set id 66然后报了这个错。MySQL就没这个问题解决办法将该表的IDENTITY_INSERT设置为ON。貌似每次insert之前都要set一下会话结束默认回复为off这也太不方便了有人知道更方便的解决办法吗SET IDENTITY_INSERT T_USER ON;参考资料https://www.cnblogs.com/miracle-luna/p/17772945.htmlhttps://eco.dameng.com/community/question/20f934916987b5757be703efece7a560GROUP_CONCAT()函数现象DM不支持GROUP_CONCAT()函数DM里的对应函数是WM_CONCAT()参考资料https://blog.csdn.net/Odinpeng/article/details/131100174Too big variables space现象有个任务需要大批量一次性插入数据大概在1W条以上然后DM报该错参考资料https://blog.csdn.net/weixin_60072306/article/details/135776040
返回列表