【DM版本】: DM 8.1
【操作系统】:Windows 10
【CPU】: Intel® Core™ i5-7500 CPU @ 3.40GHz
【问题描述】:
背景:我们此前有一个MySQL(8.0)数据库,在项目中使用EFCore3.1访问数据。现准备使用数据库迁移功能(DTS)将MySQL数据库架构迁移至达梦数据并继续使用EFCore3.1访问数据时发现了一些问题。
DATETIME
(TIMESTAMP
)类型的表的数据全部都迁移失败了,错误信息是错误号: 6006
错误消息: 不支持该数据类型
---------------------------------
CREATE TABLE
****
"SOMECOLUMN" TIMESTAMP(0),
****
.HasColumnType
定义数据类型时,varchar
类型的长度必须按"字节数"而非"字符数"声明,否则映射时会出现这样的异常信息。.HasColumnType("varchar(36)")
会出现上述异常,但使用.HasColumnType("varchar(144)")
不会报错,去掉.HasColumnType
也不会报错。TEXT
类型通过EFCore查询结果赋值到属性中会丢失第一个字符.HasColumnType("text")
)VARCHAR
类型字段不受影响。不知道是bug还是别的什么原因,希望得到解答。
补充demo数据:
MySQL数据库转储(仅结构,包含一个initdata的存储过程可用于初始化数据)
test.sql
测试项目Demo的cs文件,不包含project文件,新建.net core 3.1控制台项目并引用相关库
(DmProvider 1.1.0, Microsoft.EntityFrameworkCore.Dm 3.1.0, Pomelo.EntityFrameworkCore.MySql 3.2.6)
cs files.zip
问题2无法重现,这个问题发现仅在某一数据库上出现异常,其他数据库表现正常。我正在排查其他原因。
问题一验证数据可正常迁移至达梦
初始化数据库
字符集UTF8、大小写设置不敏感(达梦中建议大小写设置敏感,否则where 条件匹配的结果可能不正确 where c1=’a’ 和 where c1=’A’结果集返回一样会有问题,需要注意下)
[dmdba@oracle bin]$ ./dminit path=/home/dmdba/dmdata_sec CASE_SENSITIVE=0 CHARSET=1
使用DTS工具从MySQL迁移数据至达梦
达梦端查询表及表数据
第一个问题可以把表结构发出来看下,达梦是支持DATETIME和TIMESTAMP时间类型的。
第二个问题,尝试下将库初始成默认的参数看下,是不是也有同样的问题。
第三个问题,能否发一小段demo样例,我这边试下。