select -1292 Truncated incorrect INTEGER value 错误

【问题】 SQL中有一个字段是varchar类型错误使用数值类型,结果报了33408 warnings ,warnning全部为1292 | Truncated incorrect INTEGER value:,使用正确数据类型后没有warnging,为什么select会产生129错误

【业务影响】

【TiDB 版本】 4.0.13

SERVICE_STATE_CODE | varchar(10) | NO | | NULL |


若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

麻烦发一下使用 数值 和 字符串 类型执行 SQL 的执行计划,可以通过 “explain analyze SQL Text“ 输出一下结果。

执行计划.bak (8.7 KB)

Hi ~ 又确认了一下,如果是 varchar 类型数据,谓词查询使用整数,且没有使用 ‘’ 进行字符串区分。报 warning 是符合预期的,但是使用 service_state_code = 345 查询到结果可能存在非预期结果。主要原因是如果遇到这类情况,SQL 优化器会进行 cast 转化,转化不能够保证结果正确性,这个在 MySQL 中也是类似的。

执行计划里面,会对查询逻辑进行 cast 转化,这里对于不太明确类型数据进行 cast 转化过程中,会影响到结果的精确。所以会影响结果。

eq(cast(d_users.tf_f_user.service_state_code), 345)
eq(d_users.tf_f_user.service_state_code, "345")

所以还是建议使用规范的 SQL 来处理业务逻辑,规避类似问题。

感谢!

客气啦

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。