MySql 添加 Function时报错

版本: 5.8

错误信息:

This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its de 错误解决办法

添加Function如下:

DROP FUNCTION IF EXISTS `shop_ajiababy_com`.`countDistance`;
DELIMITER ;;
CREATE DEFINER=`rojers`@`%` FUNCTION `shop_ajiababy_com`.`countDistance`(`StartLon` double,`StartLat` double,`EndLon` double,`EndLat` double) RETURNS int(10)
BEGIN
	DECLARE PointDistance INT(10);
	
	SELECT ROUND(6378 * acos (  
								cos ( radians( StartLat ) )  
								* cos( radians( EndLat ) )  
								* cos( radians( EndLon ) - radians( StartLon ) )  
								+ sin ( radians( StartLat ) )  
								* sin( radians( EndLat ) )  
							) * 1000) INTO PointDistance;

	RETURN PointDistance;
END
;;
DELIMITER ;

解决:

开启了bin-log, 就必须指定函数是否是

  1. DETERMINISTIC 确定性的
  2. NO SQL 没有SQl语句,当然也不会修改数据
  3. READS SQL DATA 只是读取数据,当然也不会修改数据
  4. MODIFIES SQL DATA 要修改数据
  5. CONTAINS SQL 包含了SQL语句

其中在function里面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支持。

如果开启了 bin-log, 就必须为我们的function指定一个参数

方案:

在MySQL中创建函数时出现这种错误的解决方法:

set global log_bin_trust_function_creators=TRUE;