Skip to content

unsigned mediumint value through binlog streamer wrongfully parsed #299

@HemeraOne

Description

@HemeraOne
table:
CREATE TABLE `customer` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `geo_city` mediumint(8) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4

queries:
insert into customer values (null, 1);
update customer set geo_city = 8592090 where id = 1; //crashes

error:
ERRO[0009] fatal error detected                          errfrom=binlog_writer error="exec query at pos (mysql-bin.049833, 1049512401) -> (mysql-bin.049833, 1049512401) (163 bytes): Error 1264: Out of range value for column 'geo_city' at row 1" tag=error_handler

ghostferry query:
/*application:ghostferry*/ BEGIN;\n/*application:ghostferry*/ UPDATE `martijntest`.`customer` SET `id`=6,`geo_city`=4286782170 WHERE `id`=6 AND `geo_city`=1;\nCOMMIT

so somehow the unsigned value which lies outside of the signed value gets wrongfully converted: 8592090 -> 4286782170

value parsed from binlog: -8185126

should be converted to int24 which seems to be not a thing in golang

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions