gpt4 book ai didi

mysql - 列 'x' 的数据被截断

转载 作者:行者123 更新时间:2023-11-30 23:14:56 25 4
gpt4 key购买 nike

我正在尝试获取两点之间的距离,效果很好,但我遇到的问题是这些警告消息:

Data truncated for column 'x' at row 32
Data truncated for column 'x' at row 82
Data truncated for column 'x' at row 89

这是我创建的函数:

CREATE FUNCTION `GetDistance`(`lat1` numeric(10, 7), `lon1` numeric(10, 7), `lat2` numeric(10, 7), `lon2` numeric(10, 7))
RETURNS decimal(10,7)
BEGIN
DECLARE x decimal(10, 7);
DECLARE pi decimal(21, 20);
SET pi = 3.14159265358979323846;
SET x = round(sin(lat1 * pi / 180)
* sin(lat2 * pi / 180)
+ cos(lat1 * pi / 180)
* cos(lat2 * pi / 180)
* cos((lon2 * pi / 180) - (lon1 * pi / 180)), 7);
SET x = round(atan((sqrt( 1- power( x, 2))) / x), 7);
RETURN round((1.852 * 60.0 * ((x / pi) * 180)) / 1.609344, 7);
END

下面是lat1lon1lat2lon2两列

CREATE TABLE `world_cities` (
`latitude` DECIMAL(10,7) NULL DEFAULT NULL,
`longitude` DECIMAL(10,7) NULL DEFAULT NULL,
)

以下是最大/最小值:

"max(latitude)"     "min(latitude)"     "max(longitude)"     "min(longitude)"
"82.4833330" "-54.9333330" "180.0000000" "-179.9833333"

那么,是什么导致了这个警告消息?

这里是调用函​​数的查询:

SELECT city, region, population, latitude, longitude,
GetDistance(@lat, @lon, latitude, longitude) as dist
FROM world_cities
WHERE MBRContains(LineString(Point(@lat + @kmRange / 111.1, @lon + @kmRange / (111.1 / COS(RADIANS(@lat)))), Point(@lat - @kmRange / 111.1, @lon - @kmRange / (111.1 / COS(RADIANS(@lat))))), location)
and city_id != @city_id
order By dist;

最佳答案

您返回 RETURNS decimal(10,7) 并同时计算远大于 decimal(10,7) 的距离。
arctan(a) 的值应该在 -pi/2pi/2 之间(-1.57 ... 1.57).
我们假设 x = pi/2,所以 x/pi = (pi/2)/pi = 1/2
您的距离值将超过 6000,这比 decimal(10,7) 大。

尝试将 RETURNS decimal(10,7) 更改为 RETURNS decimal(11,7),它应该涵盖所有可能的值并且在没有警告的情况下工作。

关于mysql - 列 'x' 的数据被截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18372178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com