注册
Java应用关于MYSQL向DM8迁移的总结
培训园地/ 文章详情 /

Java应用关于MYSQL向DM8迁移的总结

Lucay丶 2023/05/19 1800 2 0

由于本人负责的JAVA应用一直使用MYSQL,最近为了国产化,走信创路线,公司觉得向DM8迁移,适配该应用,在迁移过程中,遇到了几个MYSQL转DM8的兼容性问题,特此在这里与大家分享,希望对各位开发工程师有帮助。

  1. JDBC
    <!-- 添加 dm8 jdbc jar 包依赖 -->
    <dependency>
    <groupId>com.dameng</groupId>
    <artifactId>DmJdbcDriver18</artifactId>
    <version>${dm8.version}</version>
    </dependency>
    链接字符串信息:
    url: jdbc:dm://192.168.xxx.xxx:XXXX/
    username: 新建用户名
    password: 密码
    driver-class-name: dm.jdbc.driver.DmDriver

  2. 数据库配置相关
    DM默认不支持CLOB、BLOB大字段进行比较(mysql Text类型字段会默认转成CLOB),该参数表示是否支持大字段类型的比较。0:不支持;1:支持。设置为1后支持DISTINCT、ORDER BY、分析函数和集函数支持对大字段进行处理。
    sp_set_para_value(1,'ENABLE_BLOB_CMP_FLAG',1);
    解决group by报错
    也可以修改dm.ini参数GROUP_OPT_FLAG=1,动态,会话级参数,不用重启数据库。
    sp_set_para_value(1,'GROUP_OPT_FLAG',1);

  3. SQL相关(以mysql为对比)

  • 单字段多行用逗号拼接成一行
// 以下语句通过判断数据源是mysql/DM/pgsql来实现不同的处理。 SELECT <if test="@Global@getConfig('spring.datasource.db5.driver-class-name')=='com.mysql.cj.jdbc.Driver'"> GROUP_concat(url) </if> <if test="@Global@getConfig('spring.datasource.db5.driver-class-name') == 'dm.jdbc.driver.DmDriver'"> WM_CONCAT(url) </if> <if test="@Global@getConfig('spring.datasource.db5.driver-class-name')=='org.postgresql.Driver'"> STRING_AGG(url,',') </if> from sys_xtxx
  • 列名与保留字冲突的处理
// mysql使用“ ` ”标记括起来,表示字段,而DM的同保留字字段名必须用双引号括起来\ &lt;if test="@Global@getConfig('spring.datasource.db5.driver-class-name') == 'dm.jdbc.driver.DmDriver'"> "TO" = #{to}, &lt;/if> &lt;if test="@Global@getConfig('spring.datasource.db5.driver-class-name') != 'dm.jdbc.driver.DmDriver'"> `to` = #{to}, &lt;/if>
  • 多字段拼接
&lt;if test="@Global@getConfig('spring.datasource.db5.driver-class-name')!='dm.jdbc.driver.DmDriver'"> CONCAT_WS(',', BMDM, JZBMDM) &lt;/if> &lt;if test="@Global@getConfig('spring.datasource.db5.driver-class-name')=='dm.jdbc.driver.DmDriver'"> concat(concat(BMDM, ','), JZBMDM) &lt;/if>
  • 窗口函数ROW_NUMBER() OVER()
// 这里只做了DM的判断是因为mysql使用该函数无需任何参数,而DM要求OVER中必须有order by 或group by表达式的参数。 SELECT ROW_NUMBER () OVER ( &lt;if test="@Global@getConfig('spring.datasource.db5.driver-class-name')=='dm.jdbc.driver.DmDriver'"> ORDER BY CREATIONTIME ASC &lt;/if> ) AS RN,
  • 时间类型转字符串
&lt;if test="@Global@getConfig('spring.datasource.db5.driver-class-name')=='com.mysql.cj.jdbc.Driver'"> AND YEAR ( CREATIONTIME ) = #{year} AND MONTH ( CREATIONTIME ) = #{mouth} &lt;/if> &lt;if test="@.Global@getConfig('spring.datasource.db5.driver-class-name')=='dm.jdbc.driver.DmDriver'"> AND TO_CHAR(CREATIONTIME,'YYYY') = #{year} AND TO_CHAR(CREATIONTIME,'MM') = #{mouth} &lt;/if>
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服