tidb: Slice bounds out of range error caused by using duplicate key

Bug Report

1. Minimal reproduce step (Required)

When I was executing this sql statement, this error appeared, but it was normal in mysql. And, when I removed on duplicate key update, the remaining SQL statements can also be executed normally.

  • in tidb v5.1.0 image

  • in tidb v5.1.0 without duplicate key update image

  • in mysql 5.7.14 image

2. What did you expect to see? (Required)

I expect to see the same result as mysql 5.7

3. What did you see instead (Required)

ERROR 1105 (HY000): runtime error: slice bounds out of range [26:25]

4. What is your TiDB version? (Required)

  • tidb version v5.1.0 image
  • mysql version image

5.Others

  • Table building statement
CREATE TABLE `cips_chck_detl` (
  `subsys` char(4) NOT NULL,
  `bankcd` varchar(14) NOT NULL,
  `chckdt` varchar(8) NOT NULL,
  `iotype` char(1) DEFAULT NULL,
  `mesgtp` varchar(20) NOT NULL,
  `sendog` varchar(20) DEFAULT NULL,
  `crdbtg` char(4) DEFAULT NULL,
  `cipsam` decimal(18,2) DEFAULT NULL,
  `cipsnm` int(11) DEFAULT NULL,
  `blncdt` varchar(8) DEFAULT NULL,
  `blncbt` varchar(8) DEFAULT NULL,
  `cipsst` char(4) DEFAULT NULL,
  `fcbpdt` varchar(8) DEFAULT NULL,
  `fcbpsq` varchar(20) DEFAULT NULL,
  `tranam` decimal(18,2) DEFAULT NULL,
  `trannm` int(11) DEFAULT NULL,
  `procst` char(4) DEFAULT NULL,
  `chckst` char(1) DEFAULT NULL,
  `brchno` varchar(20) DEFAULT NULL,
  `mssgid` varchar(35) DEFAULT NULL,
  `mybldt` varchar(8) DEFAULT NULL,
  `dnbztg` char(4) DEFAULT NULL,
  `adjtbk` varchar(20) DEFAULT NULL,
  `oprttp` varchar(10) DEFAULT NULL,
  `chcktp` char(1) DEFAULT NULL,
  `chcksc` char(1) DEFAULT NULL,
  KEY `idx_cnap_chck_detl_chckdt` (`chckdt`),
  KEY `idx_cips_chck_detl_all` (`chckdt`,`subsys`,`chckst`,`mesgtp`,`sendog`),
  KEY `idx_cnap_chck_detl_mssgid` (`mssgid`,`chckdt`,`dnbztg`,`iotype`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='table1';



CREATE TABLE `cips_m111` (
  `fcbpdt` char(8) NOT NULL,
  `fcbpsq` varchar(20) NOT NULL,
  `chnlsq` varchar(30) DEFAULT NULL,
  `iotype` char(1) NOT NULL,
  `mesgtp` varchar(35) DEFAULT NULL,
  `procst` char(4) DEFAULT NULL,
  `cipstx` varchar(105) DEFAULT NULL,
  `cipsst` char(4) DEFAULT NULL,
  `looktg` char(1) DEFAULT NULL,
  `lookrm` varchar(120) DEFAULT NULL,
  `repttg` char(1) DEFAULT NULL,
  `transt` char(1) DEFAULT NULL,
  `sendcl` varchar(35) DEFAULT NULL,
  `mssgid` varchar(35) DEFAULT NULL,
  `mesgtm` varchar(19) DEFAULT NULL,
  `etebid` varchar(35) DEFAULT NULL,
  `busils` varchar(35) DEFAULT NULL,
  `crcycd` varchar(3) DEFAULT NULL,
  `tranam` decimal(18,2) DEFAULT NULL,
  `intbdt` char(8) DEFAULT NULL,
  `mesglv` varchar(4) DEFAULT NULL,
  `setltm` varchar(19) DEFAULT NULL,
  `ocrycd` varchar(3) DEFAULT NULL,
  `otraam` decimal(18,2) DEFAULT NULL,
  `exchra` decimal(21,10) DEFAULT NULL,
  `mgfetp` varchar(4) DEFAULT NULL,
  `freetg` char(1) DEFAULT NULL,
  `pyercl` varchar(35) DEFAULT NULL,
  `pyercd` varchar(35) DEFAULT NULL,
  `pyeecl` varchar(35) DEFAULT NULL,
  `pyeecd` varchar(35) DEFAULT NULL,
  `agenog` varchar(35) DEFAULT NULL,
  `agenna` varchar(140) DEFAULT NULL,
  `agseog` varchar(35) DEFAULT NULL,
  `agsena` varchar(140) DEFAULT NULL,
  `pyerna` varchar(140) DEFAULT NULL,
  `pyerad` varchar(497) DEFAULT NULL,
  `pyerog` varchar(35) DEFAULT NULL,
  `prcrno` varchar(35) DEFAULT NULL,
  `prcrtp` varchar(2) DEFAULT NULL,
  `pradcd` varchar(2) DEFAULT NULL,
  `pyerac` varchar(34) DEFAULT NULL,
  `pyerbk` varchar(35) DEFAULT NULL,
  `prbkna` varchar(140) DEFAULT NULL,
  `prbkad` varchar(497) DEFAULT NULL,
  `prbkac` varchar(34) DEFAULT NULL,
  `pyeebk` varchar(35) DEFAULT NULL,
  `pebkna` varchar(140) DEFAULT NULL,
  `pebkad` varchar(497) DEFAULT NULL,
  `pebkac` varchar(34) DEFAULT NULL,
  `pyeena` varchar(140) DEFAULT NULL,
  `pyeead` varchar(497) DEFAULT NULL,
  `pyeeog` varchar(35) DEFAULT NULL,
  `pecrno` varchar(35) DEFAULT NULL,
  `pecrtp` varchar(2) DEFAULT NULL,
  `peadcd` varchar(2) DEFAULT NULL,
  `pyeeac` varchar(34) DEFAULT NULL,
  `progcd` varchar(35) DEFAULT NULL,
  `prognc` varchar(140) DEFAULT NULL,
  `peogcd` varchar(35) DEFAULT NULL,
  `peognc` varchar(140) DEFAULT NULL,
  `pyeemk` text DEFAULT NULL,
  `oderno` varchar(35) DEFAULT NULL,
  `oderna` text DEFAULT NULL ,
  `remark` text DEFAULT NULL ,
  `retnmk` varchar(140) DEFAULT NULL ,
  `setldt` char(8) DEFAULT NULL ,
  `pereid` varchar(60) DEFAULT NULL,
  `peeeid` varchar(60) DEFAULT NULL,
  `dyngtg` varchar(4) DEFAULT NULL,
  `asgnst` char(1) NOT NULL,
  `systno` varchar(20) DEFAULT NULL,
  `brchno` varchar(12) DEFAULT NULL,
  `userid` varchar(12) DEFAULT NULL,
  `ckbkus` varchar(12) DEFAULT NULL,
  `authus` varchar(12) DEFAULT NULL,
  `zztrtm` varchar(20) DEFAULT NULL,
  `rejetx` varchar(300) DEFAULT NULL,
  `trantg` char(1) DEFAULT NULL,
  `authst` char(1) DEFAULT NULL,
  `rqsyid` varchar(10) DEFAULT NULL,
  `zzcltm` varchar(20) DEFAULT NULL,
  `dcmtnm` int(11) DEFAULT NULL,
  `afeetg` char(1) DEFAULT NULL,
  `afeeam` decimal(18,2) DEFAULT NULL,
  `afeecd` varchar(20) DEFAULT NULL,
  `afeeac` varchar(32) DEFAULT NULL,
  `afeena` varchar(180) DEFAULT NULL,
  `dcmttp` varchar(4) DEFAULT NULL,
  `dcmtno` varchar(32) DEFAULT NULL,
  `modfac` varchar(32) DEFAULT NULL,
  `modfna` varchar(180) DEFAULT NULL,
  `blncdt` varchar(8) DEFAULT NULL,
  `blncbt` varchar(4) DEFAULT NULL,
  `ckprst` char(1) DEFAULT NULL,
  `opertp` char(1) DEFAULT NULL,
  `actndc` varchar(128) DEFAULT NULL ,
  `pyerar` varchar(4) DEFAULT NULL ,
  `pyeear` varchar(4) DEFAULT NULL ,
  `pyerat` char(1) DEFAULT NULL ,
  `pyeeat` char(1) DEFAULT NULL ,
  `blanmd` varchar(2) DEFAULT NULL ,
  `ifrefd` char(1) DEFAULT NULL ,
  `oinlno` varchar(24) DEFAULT NULL ,
  `balopc` varchar(6) DEFAULT NULL ,
  `bustyc` varchar(6) DEFAULT NULL ,
  `bustyl` varchar(8) DEFAULT NULL ,
  `iprpym` char(1) DEFAULT NULL ,
  `prpysc` decimal(4,2) DEFAULT NULL ,
  `acperd` int(11) DEFAULT NULL ,
  `custst` varchar(4) DEFAULT NULL ,
  `cerfno` varchar(32) DEFAULT NULL ,
  `contno` varchar(24) DEFAULT NULL ,
  `tranrl` varchar(2) DEFAULT NULL ,
  `trantp` varchar(2) DEFAULT NULL ,
  `peebic` varchar(11) DEFAULT NULL ,
  `tranpp` varchar(6) DEFAULT NULL ,
  `trbstp` varchar(4) DEFAULT NULL ,
  PRIMARY KEY (`fcbpdt`,`fcbpsq`) /*T![clustered_index] NONCLUSTERED */,
  KEY `idx_cips_m111_2` (`fcbpdt`,`sendcl`,`mssgid`),
  KEY `pk_cips_m111_3` (`chnlsq`),
  KEY `pk_cips_m111_4` (`pyerac`,`pyerna`,`tranam`,`pyeeac`,`pyeebk`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='流水表';
  • SQL statement executed
insert into cips_chck_detl 
( subsys, bankcd, chckdt, iotype, mesgtp, sendog, crdbtg, cipsam, cipsnm, blncdt, blncbt, cipsst, fcbpdt, fcbpsq, tranam, trannm, procst, chckst, brchno, mssgid, mybldt, dnbztg, chcktp, chcksc) 
select 'CIPS', 'ADBNCNBJXXX', '20210827', d.iotype, d.mesgtp, d.sendcl, null, 0, 0, null,null, null, d.fcbpdt, d.fcbpsq, d.tranam, 1 as trannm, case iotype when '0' then procst else cipsst end as procst, 
'0', d.brchno, d.mssgid, d.blncdt, d.dyngtg, 'T', '1' 
from 
cips_m111 d 
where d.blncdt = '20210827' and 'ADBNCNBJXXX' in (d.pyercl,d.pyeecl) and d.dyngtg= 'DAYT' and d.mesgtp = 'cips.111.001.02' and iotype = case when ' CRDT' = 'DBIT' then '0' else '1' end 
and procst not in ('CH**','CH*0','CH00','CH05','CH08','CH13','CH18','CH19') 
on duplicate key 
update 
fcbpdt = d.fcbpdt, fcbpsq = d.fcbpsq, tranam = d.tranam, trannm = 1, procst = d.procst, mybldt = d.blncdt, brchno = d.brchno, chckst = '0';

About this issue

  • Original URL
  • State: closed
  • Created 3 years ago
  • Comments: 15 (6 by maintainers)

Commits related to this issue

Most upvoted comments

@aytrack We’d better upgrade the severity of the problem to critical, because it’s troublesome to bypass the problem, and it’s best to cherry pick all branches.