我想获得两点之间的距离,也能正常工作,但什么我有问题是这些警告消息:数据截断列“X”
数据被截断列“X”在列32
数据被截断为列“X”在列82
数据被截断为列“X”在列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
下面是lat1
,lon1
和lat2
两列,lon2
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;
不,改变仍然给我的警告。 –
@Alex这实际上是一个问题,但我意识到它会导致“超出范围值列......”警告,而不是“数据截断”。 – jaeheung