【 使用环境 】生产环境
【 OB or 其他组件 】OBCE-4.2.2
【 使用版本 】OBCE-4.2.2
【问题描述】迁移MySQL8.0.x 到 OBCE-4.2.2,迁移期间有数据丢失,发现ob 唯一性约束跟mysql 行为有差异。
1、mysql 唯一性约束 不检查 ‘’ ,而ob会检查,导致数据丢失;
2、mysql 唯一约束检查 对大小写 ,而ob 不检查 大小写,导致数据丢失;
【复现路径】
CREATE TABLE `alm_i18n_data` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`LANG_ID` int(11) NOT NULL,
`CODE` varchar(255) DEFAULT NULL,
`VALUE` varchar(255) DEFAULT NULL,
`MODIFIED_BY` varchar(100) DEFAULT NULL,
`MODIFIED_DATE` datetime DEFAULT NULL,
`type` varchar(100) NOT NULL DEFAULT '',
PRIMARY KEY (`ID`),
UNIQUE KEY `uniq_code_type_langid` (`CODE`, `type`, `LANG_ID`)
)
mysql uniq_code_type_langid唯一性约束不检查 type NULL 的列,到了OB 认为 NULL = NULL 造成数据丢失;
mysql uniq_code_type_langid 唯一性约束 对大小写检查,而ob认为 大小写 一样,违反唯一性约束,导致数据丢失。