Unix脚本调用RDS Aurora的MySQL存储过程传参失败问题排查
问题根因定位
核心错误是字符串类型的日期参数传入存储过程时未加单引号,导致MySQL将日期值识别为减法算术表达式:
你写的调用语句展开后实际执行的SQL是 call my_proc(2021-09-25);,MySQL会把不带引号的2021-09-25判定为数值运算,计算2021 - 9 - 25 = 1987,再隐式转换为字符串传入存储过程,和你拿到的错误结果完全匹配。
修复方案
修改Unix脚本中的调用语句,给$DATE参数外层加上单引号(双引号内部的单引号不会被shell解析,会正常传递给MySQL):
echo $DATE $MYSQL_CMD -e " use $MY_DATABASE; call $PROC_NAME('$DATE'); show warnings;"
修改后展开的SQL会变成 call my_proc('2021-09-25');,符合字符串参数的传参语法要求,存储过程就能拿到正确的日期值。
补充说明:这是shell调用MySQL传参的常见问题,所有非数值类型的参数(字符串、日期等)传入SQL时都要套单引号,避免被MySQL当成表达式、标识符解析。
内容的提问来源于stack exchange,提问作者Deepak nigam
相关产品推荐
相关产品推荐

