tidb5.4.2升级6.1.2之后 text字段频繁出现数据对于字段过大的报错 。

【 TiDB 使用环境】生产环境 /测试/ Poc
生产
【 TiDB 版本】
6.1.2
【复现路径】做过哪些操作出现的问题
5.4.2 升级 6.1.2 之后 频繁报这个错误 。
出现比较多的 Data too long for column ‘video_material’ at row 错误 :(image_material字段的报错也有)

CREATE TABLE Synads_Tt_Qc_Creative (
creative_id bigint(63) NOT NULL COMMENT ‘创意ID’,
ad_id bigint(63) DEFAULT NULL COMMENT ‘计划ID’,
advertiser_id bigint(63) DEFAULT NULL COMMENT ‘广告主ID’,
status varchar(500) DEFAULT NULL COMMENT ‘计划投放状态’,
opt_status varchar(500) DEFAULT NULL COMMENT ‘计划操作状态’,
image_mode varchar(500) DEFAULT NULL COMMENT ‘创意素材类型’,
creative_create_time varchar(100) DEFAULT NULL COMMENT ‘创意创建时间,格式:yyyy-mm-dd HH:MM:SS’,
creative_modify_time varchar(100) DEFAULT NULL COMMENT ‘创意修改时间,格式:yyyy-mm-dd HH:MM:SS’,
video_material text DEFAULT NULL COMMENT ‘视频素材信息’,
image_material text DEFAULT NULL COMMENT ‘图片素材信息’,
title_material text DEFAULT NULL COMMENT ‘标题素材信息’,
promotion_card_material varchar(1500) DEFAULT NULL COMMENT ‘推广卡片信息’,
Synch_Create_Date varchar(25) NOT NULL COMMENT ‘格式:yyyy-mm-dd’,
lab_ad_type varchar(255) DEFAULT NULL COMMENT ‘托管计划类型,NOT_LAB_AD:非托管计划,LAB_AD:托管计划’,
Synch_Create_Hour int(11) NOT NULL COMMENT ‘小时值范围:0~23’,
Synch_Time char(19) DEFAULT NULL,
marketing_goal varchar(255) DEFAULT NULL COMMENT ‘营销目标,允许值:VIDEO_PROM_GOODS 短视频带货、LIVE_PROM_GOODS 直播带货’,
creative_material_mode varchar(60) DEFAULT NULL COMMENT ‘创意呈现方式,CUSTOM_CREATIVE: 自定义创意,PROGRAMMATIC_CREATIVE: 程序化创意’,
PRIMARY KEY (creative_id) /*T![clustered_index] CLUSTERED */,
KEY creative_create_time (creative_create_time),
KEY creative_modify_time (creative_modify_time),
KEY Synch_Create_Date (Synch_Create_Date)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
【遇到的问题:问题现象及影响】
【资源配置】
【附件:截图/日志/监控】
2022/11/17 11:29:25.359 +08:00] [INFO] [conn.go:1149] [command dispatched failed] [conn=985285563792585879] [connInfo=id:985285563792585879, addr:![](file:///C:\Users\heming\AppData\Roaming\Tencent\QQ\Temp%W@GJ$ACOF(TYDYECOKVDYB.png)192.168.6.29:64675 status:10, collation:utf8mb4_general_ci, user:dspwrite] [command=Execute] [status=inTxn:0, au[types:1406]Data too long for column ‘video_material’ at row 1![](file:///C:\Users\heming\AppData\Roaming\Tencent\QQ\Temp%W@GJ$ACOF(TYDYECOKVDYB.png)ngithub.com/pingcap/errors.AddStack\n\t/go/pkg/mod/![](file:///C:\Users\heming\AppData\Roaming\Tencent\QQTempSys[5UQ[BL(6~BS2JV6W}N6[%S.png)github.com/pingcap/errors@v0.11.5-0.20211224045212-9687c2b0f87c/errors.go:174![](file:///C:\Users\heming\AppData\Roaming\Tencent\QQ\Temp%W@GJ$ACOF(TYDYECOKVDYB.png)ngithub.com/pingcap/errors.(*Error).GenWithStack\n\t/go/pkg/mod/![](file:///C:\Users\heming\AppData\Roaming\Tencent\QQTempSys[5UQ[BL(6~BS2JV6W}N6[%S.png)github.com/pingcap/errors@v0.11.5-0.2021122
Path:/data/tidb/tidblog/tidb.log
2022/11/17 11:29:02.969 +08:00] [INFO] [conn.go:1149] [command dispatched failed] [conn=985285563792585877] [connInfo=id:985285563792585877, addr:![](file:///C:\Users\heming\AppData\Roaming\Tencent\QQ\Temp%W@GJ$ACOF(TYDYECOKVDYB.png)192.168.6.29:46303 status:10, collation:utf8mb4_general_ci, user:dspwrite] [command=Execute] [status=inTxn:0, au[types:1406]Data too long for column ‘image_material’ at row 1![](file:///C:\Users\heming\AppData\Roaming\Tencent\QQ\Temp%W@GJ$ACOF(TYDYECOKVDYB.png)ngithub.com/pingcap/errors.AddStack\n\t/go/pkg/mod/![](file:///C:\Users\heming\AppData\Roaming\Tencent\QQTempSys[5UQ[BL(6~BS2JV6W}N6[%S.png)github.com/pingcap/errors@v0.11.5-0.20211224045212-9687c2b0f87c/errors.go:174![](file:///C:\Users\heming\AppData\Roaming\Tencent\QQ\Temp%W@GJ$ACOF(TYDYECOKVDYB.png)ngithub.com/pingcap/errors.(*Error).GenWithStack\n\t/go/pkg/mod/![](file:///C:\Users\heming\AppData\Roaming\Tencent\QQTempSys[5UQ[BL(6~BS2JV6W}N6[%S.png)github.com/pingcap/errors@v0.11.5-0.2021122

可以看下字符集与老版本是否一致,长度是否真的超长


另外看下sql_mode是否与老版本一致,是否都为严谨模式

select @@sql_mode; #一致的
| @@sql_mode |
|STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |

不知道跟 字符集有没有关系 ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin

status:10, collation:utf8mb4_general_ci 不知道这个什么情况 。跟字符集有没有关系。

跟字符集会有一些关系,比如说在utf8下的中文单字符和在utf8mb4下的中文单字符所占用的字节数是不一致的,可以比较下对应的length(),char_length(),看看结果是否一致,是否真的达到了最大值

1 个赞

报错的语句 看着数据也不大 。应该不是真的数据过长的问题 。 试过 longtext 也不行 。
INSERT INTO Synads_Tt_Qc_Creative (creative_id, ad_id, advertiser_id, status, opt_status, image_mode, creative_create_time, creative_modify_time, video_material, image_material, title_material, promotion_card_material, Synch_Create_Date, Synch_Create_Hour, lab_ad_type, Synch_Time, creative_material_mode, marketing_goal) VALUES (?, ?, ?, ?, ?, ?, ?, ?, IFNULL(?, ?), IFNULL(?, ?), IFNULL(?, ?), ?, ?, ?, ?, NOW(), ?, ?) ON DUPLICATE KEY UPDATE status = ?, opt_status = ?, image_mode = ?, video_material = ?, creative_modify_time = ?, video_material = IFNULL(?, ?), image_material = IFNULL(?, ?), title_material = IFNULL(?, ?), promotion_card_material = ?, Synch_Create_Hour = ?, lab_ad_type = ?, Synch_Time = NOW(), creative_material_mode = ?, marketing_goal = ?
[arguments: (1733190621, 173318500, 171040419, "DELETE", "DISABLE", "VIDEO_LARGE", "2022-05-19 02:43:05", "2022-11-17 16:09:48", "[{\"aweme_item_id\":0,\"image_mode\":null,\"is_auto_generate\":0,\"video_cover_id\":\"tos-cn-v-c9e10a/537d35a58d2f41ecab2ac2\",\"video_id\":\"v02c8eg10000c9sjpq3c77\"}]", "{\"aweme_item_id\":0,\"is_auto_generate\":0,\"video_cover_id\":\"tos-cn-v-c9e10a/537d35a58d2f41e、\",\"video_id\":\"v02c8eg10000c9sjpq3c7\"}", NULL, NULL, "[{\"dynamic_words\":[],\"title\":\"飞科情人节礼盒已上线,抓紧来直播间抢! #送男朋友礼物 #男士必备 #飞科 #剃须 #剃须刀\"}]", "{\"dynamic_words\":[],\"title\":\"飞科情人节礼盒已上线,抓紧来直播间抢! #送男朋友礼物 #男士必备 #飞科 #剃须 #剃须刀\"}", NULL, "2022-05-19", "02", "NOT_LAB_AD", "PROGRAMMATIC_CREATIVE", "LIVE_PROM_GOODS", "DELETE", "DISABLE", "VIDEO_LARGE", "{\"aweme_item_id\":0,\"is_auto_generate\":0,\"video_cover_id\":\"tos-cn-v-c9e10a/537d35a58d2f41ecab2ac\",\"video_id\":\"v02c8eg10000c9sjpq3c77\"}", "2022-11-17 16:09:48", "[{\"aweme_item_id\":0,\"image_mode\":null,\"is_auto_generate\":0,\"video_cover_id\":\"tos-cn-v-c9e10a/537d35a58d2f\",\"video_id\":\"v02c8eg1000、\"}]", "{\"aweme_item_id\":0,\"is_auto_generate\":0,\"video_cover_id\":\"tos-cn-v-c9e10a/537d35a58d2f41eca\",\"video_id\":\"v02c8eg100\"}", NULL, NULL, "[{\"dynamic_words\":[],\"title\":\"飞科情人节礼盒已上线,抓紧来直播间抢! #送男朋友礼物 #男士必备 #飞科 #剃须 #剃须刀\"}]", "{\"dynamic_words\":[],\"title\":\"飞科情人节礼盒已上线,抓紧来直播间抢! #送男朋友礼物 #男士必备 #飞科 #剃须 #剃须刀\"}", NULL, "02", "NOT_LAB_AD", "PROGRAMMATIC_CREATIVE", "LIVE_PROM_GOODS")]

单独起了一个 5.4.3 的tidb,没有报错了

帮忙看看 6.1.2 tidb 哪块检查有问题吧 , 同样的后端tikv6.1.2 , 前端5.4.2 5.4.3的tidb 就不报错 。

这个可以给一条标准的sql么,我在我这里复现下

这样执行好像是没问题的 。
update Synads_Tt_Qc_Creative set video_material=‘[{“dynamic_words”:[],“title”:“飞科情人节礼盒已上线,抓紧来直播间抢! #送男朋友礼物 #男士必备 #飞科 #剃须 #剃须刀”}]’ where creative_id=1733190621287435;

https://github.com/pingcap/tidb/issues/38844

貌似是这个bug,影响版本是6.1,把ifnull去掉测试下

这个bug 能尽快修复一下吗?

这个已经close了,bug修复完了

试过了 ,就是 ifnull的问题 。 这个bug 修复版 合并到哪个 release版本了吗?



https://github.com/pingcap/tidb/commit/752bc4420d0be67ac72263abf8e73b67ef9da96b
release-6.1解决的

6.1.2视图里不能识别原始表里的索引key, force index 报key not found。 用5.4.3的tidb Server正常

新问题重新发一个贴子,避免被忽略