达梦数据库常见问题描述与分析
问题一:字段内容超长错误
原因: 达梦数据库和Oracle数据库对字段的长度有严格的规范,当然Mysql也是有的,但是默认是不启用的,哪怕超出了,也会自动扩容,但是Oracle和达梦是不会的;
解决方案:
①修改达梦数据库的字段长度进行适配;
②变更超长的数据类型;
③约束字段长度,或者进行截取处理
问题二:语句分析错误,不识别[`]符号
原因: 在Mysql中“`” 符号是为了防止和Mysql的系统字段冲突,标识这个一个普通字段,但是在达梦数据库中,不识别这个符号;
解决方案:
①采用MyBatis的拦截器对SQL进行拦截处理;
②对XML中的SQL里面的[`]符号进行删除替换(推荐);
问题三:不是GROUP by 表达式
原因: 因为在Oracle和达梦中,查询字段必须在分组中出现,所以报错;
解决方案:
①去掉Sql中查询的不是分组的字段,通过代码二次查询实现;
问题四:on duplicate key update语法分析错误
原因: 属于Mysql专用语法,在Oracle和达梦中是不支持的
解决方案:
①可以通过开启达梦数据库兼容Mysql模式
问题五:达梦数据库concat函数不认识[“]符号
原因: 属于Mysql专用语法,在Oracle和达梦中是不支持的
解决方案:
①可以通过开启达梦数据库兼容Mysql模式
②修改sql语句
问题六:语句分析错误,不识别[“]符号
原因: 在Mysql中无论是[‘][“]都是识别的,但是在达梦中只识别[‘];
解决方案:
①用[‘]替换项目中的[“];
问题七:查询的结果错误,显示为[‘***’]
原因:达梦数据库查询列别名时使用[‘***’]包裹,不会报错,但是会将’***‘赋值给结果集
解决方案:
①使用双引号[“”]包裹列名关键字
问题八:convert函数报错
原因: 达梦中的convert和mysql的使用方式是相反的。
解决方案:
①换为convert(type,value)
问题九:TO_DATE(NOW(),‘yyyy-MM-dd’) 报错
原因: 日期函数不一致
解决方案:
①改为DATE_FORMAT(SYSDATE, ‘%Y-%m-%d’)
问题十:建的表无法查询
可能原因: 达梦数据库大小写敏感,因此在建表时候,需要注意字段大小写,若使用小写建表,将会出现建表成功,无法插入任何数据;
解决方案:
①重新建表,注意大小写
问题十一:建表后无法插入自增列数据
可能原因: 达梦数据库默认自增列的值不允许修改和更新
解决方案:
①手动插入自增列,将IDENTITY_INSERT设置为ON
SET IDENTITY_INSERT 模式名.表名 on
问题十二:DATE_ADD 函数报错,返回一个日期或时间值加上一个时间间隔的时间值
可能原因:达梦不兼容 DATE_ADD ,示例:SELECT DATE_ADD(‘2020-07-12 12:20:30’,INTERVAL ‘2’ DAY);
解决方案:使用 ADD_DAYS 函数替换,示例:SELECT add_days(‘2020-07-12 12:20:30’,2);
历史文章:
达梦数据库(一)- 安装与初始化
达梦数据库(二)- 达梦数据库概念说明
达梦数据库入门指南(三)- 模式概念与基本使用
达梦数据库入门指南(四)- 数据迁移