编写mysql存储过程时,最好设置SQL_MODE

编写mysql存储过程时,最好设置SQL_MODE,比如下面的例子:

DELIMITER // CREATE FUNCTION test(p_first TINYINT, p_second TINYINT) RETURNS TINYINT BEGIN DECLARE v_result TINYINT; SET v_result := p_first + p_second; RETURN v_result; END// DELIMITER ;

欢迎大家阅读《编撰mysql存储过程时,最好设置SQL_MODE》,跪求各位点评,by 搞代码

看上去是正确的,比如调用:

mysql> select test(126,1);

+-------------+

| test(126,1) |

+-------------+

|         127 |

+-------------+

1 row in set (0.00 sec)

但:

mysql> select test(127,1);

+-------------+

| test(127,1) |

+-------------+

|         127 |

+-------------+

1 row in set, 1 warning (0.00 sec)

就错误了,因为用了tinyint,

所以,强烈建议编译存储过程时,设置sql_mode,比如:

SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='STRICT_TRANS_TABLES';

然后当再运行存储过程时,可以有提示:

mysql> select test(127,1);

ERROR 1264 (22003): Out of range value for column 'v_result' at row 1

1 楼 lucky_java 2012-05-18

10 

10

e7ce419cf2d6ad34d01da2ceb8829eed.png

微信 赏一包辣条吧~

023a57327877fb4402bcc76911ec18ea.png

支付宝 赏一听可乐吧~

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐