鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

MySQL迁移至DM8指导

指导建议1

  1. 请下载链接中的DM驱动,将MySQL的JDBC驱动mysql-connector-java,替换为DM8驱动DmJdbcDriver18。

    DM驱动下载链接:https://download.dameng.com/eco/adapter/resource/jdbc/jdbc-20240326.zip

  2. 请使用DEM工具进行数据移植。

指导建议2

请在迁移数据之前,将DM数据库参数调整为兼容MySQL数据库,可参考下列措施:

  • 在实例指定的配置文件“dm.ini”中修改参数COMPATIBLE_MODE=4。
  • 使用语句ALTER SYSTEM SET 'COMPATIBLE_MODE'=4 SPFILE;修改,修改后重启数据库服务使其生效。

指导建议3

MySQL建表默认的字符编码是UTF8_GENERAL_CI(不区分大小写),所以建议在MySQL迁移到DM时,将达梦数据库设置成大小写不敏感。可参考下列措施:

  • 请在初始实例时,设置大小写敏感参数为不敏感(CASE_SENSITIVE=0),注意该设置一旦确定无法修改。
  • 若在初始化实例时设置了大小写敏感(CASE_SENSITIVE=1),请在使用DEM工具迁移的时候,去掉“保持对象名大小写”的勾选。

指导建议4

MySQL中varchar类型在5.0.3版本及以上按字符存储,varchar(1)存储一个汉字;DM默认以字节存储,varchar(3)存储一个汉字。MySQL5.0.3及以上版本迁移到DM中,可能会发生字符截断的问题。若表中包含中文字符,可参考下列措施:

  • 扩大字段长度,例MySQL表中字段长度为10,DM建表时需要将字段长度扩大为30。
  • 重新初始化实例,设置参数VARCHAR类型对象的长度以字符为单位(LENGTH_IN_CHAR=1)。

指导建议5

当在DM中创建表等对象时,出现“语法分析出错”报错,可能是因为使用的对象名为系统保留字。请通过SQL语句SELECT * FROM V$RESERVED_WORDS WHERE RESERVED='Y' AND KEYWORD=对象名称;,查询该对象名是否为保留字,若是,可参考下列措施:

  • 使用双引号引起对象名称,并在查询时使用引号。
  • (推荐)配置客户端dm_svc.conf文件,在对应数据库的服务配置区,添加KEYWORDS配置屏蔽关键字:KEYWORDS=对象名称。
  • 修改使用到系统关键字相关的SQL语句和对象名称。

指导建议6

在DM数据库中int类型不能设置数据精度。请核查表中字段定义中的int类型是否有精度,如果有请去除精度,例如:create table test1(v1 int(10),v2 varchar(20));需要更改成create table test1(v1 int,v2 varchar(20));

指导建议7

MySQL中时间类型TIMESTAMP默认设置为“0000-00-00 00:00:00”,在DM中必须在“0001-01-01 00:00:00.000000”到“9999-12-31 23:59:59.999999”之间。若在迁移过程中遇到TIMESTAMP类型为“0000-00-00 00:00:00”报错,请将其修改为有效的日期类型。

指导建议8

DM中区分单双引号使用,双引号用于关键字、对象名、字段名、别名等,单引号用于字符串常量。对于字段的default设置,默认的字符或字符串默认值,需要添加单引号,如char(10)default 'abc'。

指导建议9

在MySQL中若使用到DATE_FORMAT()函数,可以在DM数据库中使用to_char或to_date函数改写。例如:

  • MySQL写法:select date_format(sysdate(), '%Y年%m月') from dual
  • DM写法:select translate(to_char(sysdate, 'yyyy-mm#'),'-#','年月') from dual"

指导建议10

在MySQL中convert()函数中value在前,type在后,DM数据库中相反,若使用convert()函数,请修改参数顺序。例如:

  • MySQL写法:CONVERT(CASE WHEN TEMP_STA.c_data_value THEN NULL ELSE TEMP_STA.c_data_value END, SIGNED) AS "ONLINEUSER"
  • DM写法:CONVERT(INTEGER,CASE WHEN TEMP_STA.c_data_value THEN NULL ELSE TEMP_STA.c_data_value END) AS "ONLINEUSER"

指导建议11

DM中cast()用法与MySQL一致,但使用效果不同,例MySQL中对于数值类型的value转char类型没有限制,DM中则存在限制。可将cast(数值类型的value as char)转换为cast(数值类型的value as varchar),对于unsigned类型可以根据实际情况做对应改变或确定是否有必要进行转换。

指导建议12

在MySQL中若采用date_add函数对添加时间间隔的表达式进行求值,可在DM中使用TIMESTAMPADD函数进行替代。例如:

  • MySQL写法:select DATE_ADD(sysdate(), INTERVAL 1 YEAR);
  • DM写法:select TIMESTAMPADD(SQL_TSI_YEAR, 1,sysdate());

指导建议13

在MySQL中若使用类似interval 1 year的时间间隔表达式,在达梦数据库中,interval关键词后的正数需添加单引号,如interval '1' year,对于负数需改写,如interval '-1' year。