开发者社区> 问答> 正文

maridb - row模式下,column字段的类型和名称都正确,但是赋值却是错误的

这个截图是代码拦截示意

提问153.png

实际的dml插入语句是 insert into oc_third_anniversary_enroll (CREATE_TIME, CREATOR, MODIFIER, MODIFY_TIME, COMPANY, NAME, NUMBER, PHONE, PRODUCT_ID, USID) values ('2020-07-15 09:25:05.298', 0, 0, '2020-07-15 09:25:05.298', '测试', '测试', 'THIRD202007150001', '15750787193', 2, 177671)

(大部分时候蛮正常的,就是部分情况我是真看不懂为什么映射会不对) 不知道是什么情况会导致这种字段和赋值对不上的情况,麻烦请帮忙看一下,谢谢 mariadb的版本是 mariadb:10.5.4

然后我补充下binlog日志里的信息,会发现最后一个字段是 LONGINT 类型,跟上面解析出来的结果是不一致的(上面的截图其实好像是从index7开始就不对了)

INSERT INTO xzwpro.oc_third_anniversary_enroll SET @1=11 /* LONGINT meta=0 nullable=0 is_null=0 / @2='THIRD202007150001' / VARSTRING(128) meta=128 nullable=1 is_null=0 / @3='测试' / VARSTRING(128) meta=128 nullable=1 is_null=0 / @4='15750787193' / VARSTRING(128) meta=128 nullable=1 is_null=0 / @5='测试' / VARSTRING(256) meta=256 nullable=1 is_null=0 / @6=2 / LONGINT meta=0 nullable=1 is_null=0 / @7=177671 / LONGINT meta=0 nullable=1 is_null=0 / @8='0' / STRING(4) meta=65028 nullable=0 is_null=0 / @9='N' / STRING(4) meta=65028 nullable=0 is_null=0 / @10=0 / LONGINT meta=0 nullable=1 is_null=0 / @11='2020-07-15 09:25:05' / DATETIME(0) meta=0 nullable=1 is_null=0 / @12='2020-07-15 09:25:05' / DATETIME(0) meta=0 nullable=1 is_null=0 / @13=0 / LONGINT meta=0 nullable=1 is_null=0 */ Number of rows: 1

后面我咨询了一下,原来是这个表结构中间插入过字段,并且有调整过表结构字段的名字。。。

原提问者GitHub用户yzj114477

展开
收起
山海行 2023-04-28 15:14:07 150 0
3 条回答
写回答
取消 提交回答
  • 可能是由于表结构发生变化导致的。在表结构发生变化后,可能会导致之前的DML语句不再适用。这种情况下,你需要检查表结构的变化,并相应地调整程序中的代码。如果表结构的变化对程序造成了影响,你需要在程序中进行相应的修改,以保证数据映射的正确性。

    2023-04-29 20:55:15
    赞同 展开评论 打赏
  • 值得去的地方都没有捷径

    根据你提供的信息,我猜测问题可能出在表结构中间插入过字段,并且调整过表结构字段的名字上。这可能会导致字段顺序发生变化,从而导致某些字段和赋值对不上。

    解决这个问题的方法是,检查表结构中间是否插入过字段,并且是否调整过表结构字段的名字。如果是,需要重新检查字段顺序,确保字段顺序正确。另外,也可以考虑使用字段名来指定赋值,而不是依赖字段顺序。

    如果以上方法无法解决问题,可以考虑使用其他工具来检查表结构和数据,例如使用 mysqldump 工具导出表结构和数据,然后在另一个环境中重新导入,看是否能够正确插入数据。

    2023-04-29 14:35:31
    赞同 展开评论 打赏
  • 可以观察一下DDL语句分析一下;我之前一直遇到这种问题 例如,如果当前内存中已经存在 table_x1表结构,表结构如下:

    CREATE TABLE table_x1 ( id bigint(20) NOT NULL AUTO_INCREMENT, key1 int(11) NOT NULL COMMENT 'key1', value1 longtext NOT NULL COMMENT 'value1', PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

    这个时候再执行下面建表语句:

    CREATE TABLE IF NOT EXISTS table_x1 ( id bigint(20) NOT NULL AUTO_INCREMENT, key1 longtext NOT NULL COMMENT 'key1', value1 longtext NOT NULL COMMENT 'value1', PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

    更新了内存中的表结构;但是这个时候实际上MySQL的表结构并没有改变,这个时候如果有DML语句的话就会出现这样的情况;

    原回答者GitHub用户tsywkGo

    2023-04-28 15:34:33
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载