---
title: MySQL迁移至DM8常见适配问题
description: "1. 请下载  DM驱动(https://download.dameng.com/eco/adapter/resource/jdbc/jdbc-20240326.zip)"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdevps/portingadvisor/systemmigration/DevKit_Porting_0057.html
sourcePath: /source/zh/kunpengdevps/portingadvisor/systemmigration/DevKit_Porting_0057.html
indexId: 0d7d8d72dfe2475299965949f56199f919e9cdbf2597a2f4a0bbf871913185df79
---
# MySQL迁移至DM8常见适配问题

#### 驱动下载及DEM工具使用指导

1. 请下载  DM驱动(https://download.dameng.com/eco/adapter/resource/jdbc/jdbc-20240326.zip)
，将MySQL的JDBC驱动mysql-connector-java，替换为DM8驱动DmJdbcDriver18。
2. 请使用DEM工具进行数据移植。
  具体操作请参见官方DM数据移植文档(https://eco.dameng.com/document/dm/zh-cn/start/mysql_dm.html)和《DM DBA手记之MySQL移植到DM》(https://eco.dameng.com/eco-file-server/file/eco/download/2022081614103389JN7U46DVP8TURGBF)。


#### DM数据库兼容性设置

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

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

详情请参见DM官方数据移植文档目的端达梦准备(https://eco.dameng.com/document/dm/zh-cn/start/mysql_dm.html#3.4.2 目的端达梦准备)中兼容性参数设置。


#### DM数据库字符编码设置

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

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

详情请参见：

- DM官方数据移植文档，初始化参数说明详见  目的端达梦准备(https://eco.dameng.com/document/dm/zh-cn/start/mysql_dm.html#3.4.2 目的端达梦准备)
中第三节。
- 官方FAQ：  如何让迁移到DM的表名大小写和MySQL保持一致(https://eco.dameng.com/document/dm/zh-cn/faq/faq-mysql-dm8-migrate.html#如何让迁移到 DM 的表名大小写和 MySQL 保持一致)
和  快速设置使得在MyBatis下对象不用添加双引号(https://eco.dameng.com/document/dm/zh-cn/faq/faq-mysql-dm8-migrate.html#快速设置使得在 mybatis 下对象不用添加双引号)
。


#### 中文字符存储设置

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

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

详情请参见官方FAQ：MySQL迁移到DM报错：列[NAMES]长度超出定义(https://eco.dameng.com/document/dm/zh-cn/faq/faq-mysql-dm8-migrate.html#MySQL 迁移到 DM 报错：列[NAMES]长度超出定义)和MySQL迁移到DM8，VARCHAR类型字段内容不完整，且结尾有乱码(https://eco.dameng.com/document/dm/zh-cn/faq/faq-mysql-dm8-migrate.html#MySQL 迁移到 DM8，VARCHAR 类型字段内容不完整，且结尾有乱码)。


#### 系统保留字配置

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

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

详情请参见达梦数据库屏蔽系统保留字的方法(https://eco.dameng.com/community/article/6ca6b591fecb40d2941e524af5fc25c9)和SQL语句在两台机器上的达梦上，运行结果不同（保留字段问题）(https://eco.dameng.com/community/question/a7e82dcd4b3857650f017fa1d0e79406)。


#### DM数据库INT类型不能设置数据精度

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


#### 时间类型TIMESTAMP设置

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”报错，请将其修改为有效的日期类型。

详情请参见官方FAQ：有MySQL语法直接转DM语法的工具吗(https://eco.dameng.com/document/dm/zh-cn/faq/faq-mysql-dm8-migrate.html#有 MySQL 语法直接转 DM 语法的工具吗)和MySQL到达梦的迁移，timestamp时间类型报错(https://eco.dameng.com/document/dm/zh-cn/faq/faq-mysql-dm8-migrate.html#MySQL 到达梦的迁移，timestamp 时间类型报错。)。


#### DM数据库单双引号使用

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