编写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> 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
分享到:
相关推荐
NULL 博文链接:https://yixinhu.iteye.com/blog/1534691
本文主要内容是MySQL升级到5.7版本之后,由于默认的 sql_mode 值带来的坑以及对应的解决方案。 案例一:ONLY_FULL_GROUP_BY 问题描述 MySQL版本从5.6升级至5.7之后,部分SQL执行报错,报错信息如下: ERROR 1055 ...
本文实例讲述了mysql中的sql_mode模式。分享给大家供大家参考,具体如下: mysql数据库的中有一个环境变量sql_mode,定义了mysql应该支持的sql语法,数据校验等!我们可以通过以下方式查看当前数据库使用的sql_mode:...
主要介绍了MySql版本问题sql_mode=only_full_group_by的完美解决方案,需要的朋友可以参考下
介绍MYSql数据库的存储过程,一个简单的例子
MySQL的sql_mode合理设置 sql_mode是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入。在生产环境必须将这个值设置为严格模式,所以开发、测试环境的数据库也...
MySQL 5.7.9版本sql_mode=only_full_group_by问题 用到GROUP BY 语句查询时...
于是乎去谷歌了一番,总算是明白了其中的原因:是因为MySQL的sql_mode 模式限制着一些所谓的‘不合法’的操作。 解析 这个sql_mode,简而言之就是:它定义了你MySQL应该支持的sql语法,对数据的校验等等。。 如何查看...
sql_mode=””,即强制不设定MySql模式(如不作输入检测、错误提示、语法模式检查等)应该能提高性能,但有如下问题: 如果插入了不合适数据(错误类型或超常),mysql会将数据设为“最好的可能数据”而不报错,如:...
MySQL可以运行在不同的模式下,而且可以在不同的场景下运行不同的模式,这主要取决于系统变量 sql_mode 的值。本文主要介绍一下这个值的查看与设置,主要在Mac系统下。 对于每个模式的意义和作用,网上很容易找到,...
使用python语言链接MySQL数据库
EMS_SQL_Manager_for_MySQL_5.7.2.52112_Downloadly.ir.rar
《MySQL开发者SQL权威指南》的例子代码
需要平台:Myeclips+Mysql或Myeclips+SQL Server 2
MySQL_Data_Provider_for_DotNet,一看名字就知道怎么回事了。用.NET开发MySQL系统的必备工具