问题:
线上注册失败,线下测试环境没问题
update t_authentication_code set invalid = 0,update_time = sysdate() where email = ‘XXX’ and code = ‘XXX’ and invalid = 1;
同样的sql,线下执行成功,线上却一直没有修改成功
分析:
排除其他原因后,最后发现线上mysql的版本是mysql8,而线下测试数据库是mysql5。
再看建表语句,果然也不一样,尤其是排序规则
线上:
CREATE TABLE `t_authentication_code` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`email` varchar(255) DEFAULT NULL,`code` varchar(16) DEFAULT NULL,`invalid` int(10) unsigned DEFAULT '0',`create_time` datetime DEFAULT NULL COMMENT '创建时间',`expire_time` datetime DEFAULT NULL COMMENT '失效时间',`update_time` datetime DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=123 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
线下:
CREATE TABLE `t_authentication_code` (`id` int(10) NOT NULL AUTO_INCREMENT,`email` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,`code` varchar(16) COLLATE utf8mb4_bin DEFAULT NULL,`invalid` int(10) unsigned DEFAULT '0',`create_time` datetime DEFAULT NULL COMMENT '创建时间',`expire_time` datetime DEFAULT NULL COMMENT '失效时间',`update_time` datetime DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=73 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
解决:
线上重新按线下的建表语句建表即可。
这个就是开发人员疏忽导致的。
线上线下,要保证使用一样的数据库版本,一样的建表语句,测试环境才能真正起作用。