mysql 8.0版本 error 3516 ;error 3618

mysql 8.0版本 error 3516 ;error 3618

mysql 5.7 执行结果:

CREATE TABLE student (id int,name varchar(255),address varchar(255),wkt geometry not null);
alter table student add  SPATIAL INDEX spidx(wkt);
INSERT INTO student VALUES (1, '张', '李家隔壁', st_geomfromtext('POINT(0 0)'));
INSERT INTO student VALUES (2, '李',  '张家隔壁', st_geomfromtext('POINT(1 1)'));

mysql> SELECT id,name,st_astext(wkt),st_isvalid(wkt),st_x(wkt),st_y(wkt),st_centroid(wkt),st_area(wkt),st_length(wkt) FROM student;
+----+--------+----------------+-----------------+-----------+-----------+------------------------------------------------------+--------------+----------------+
| id | name   | st_astext(wkt) | st_isvalid(wkt) | st_x(wkt) | st_y(wkt) | st_centroid(wkt)                                     | st_area(wkt) | st_length(wkt) |
+----+--------+----------------+-----------------+-----------+-----------+------------------------------------------------------+--------------+----------------+
|  1 | 张   | POINT(0 0)     |               1 |         0 |         0 | 0x00000000010100000000000000000000000000000000000000 |            0 |           NULL |
|  2 | 李   | POINT(1 1)     |               1 |         1 |         1 | 0x000000000101000000000000000000F03F000000000000F03F |            0 |           NULL |
+----+--------+----------------+-----------------+-----------+-----------+------------------------------------------------------+--------------+----------------+
2 rows in set (0.00 sec)

MySQL 8.0 执行在函数st_centroid(wkt)、st_area(wkt) 报错。

点类型数据使用函数 st_area 报错:ERROR 3516 (HY000): POLYGON/MULTIPOLYGON value is a geometry of unexpected type POINT in st_area.
          使用函数 st_centroid 报错:ERROR 3618 (HY000): st_centroid(POINT) has not been implemented for geographic spatial reference systems.

问题原因:MySQL 5.7 与MySQL 8.0 的区别
报错在MySQL8.0 版本环境上,8.0 对于函数的使用更加严格,官方文档中给出了相关的描述:
st_centroid:如果几何图形具有地理空间参考系统(SRS)的SRID值,则会出现ER_NOT_IMPLEMENTED_for_geographic_SRS错误。
st_area:如果几何体有效,但不是多边形或多多边形对象,则会出现ER_UNEXPECTED_geometry_TYPE错误。

详细描述:
ST_Centroid()处理其参数,但有以下例外:
对于参数为空几何集合的附加条件,返回值为NULL。
如果几何图形具有地理空间参考系统(SRS)的SRID值,则会出现ER_NOT_IMPLEMENTED_for_geographic_SRS错误。

从MySQL 8.0.13开始,ST_Area()处理其参数,但有以下例外:
如果几何图形在几何上无效,则结果是未定义的区域(也就是说,它可以是任何数字),或者出现错误。
如果几何体有效,但不是多边形或多多边形对象,则会出现ER_UNEXPECTED_geometry_TYPE错误。
如果几何体是笛卡尔SRS中的有效多边形,则结果是多边形的笛卡尔面积。
如果几何体是笛卡尔SRS中的有效多重多边形,则结果是多边形的笛卡尔面积之和。
如果几何图形是地理SRS中的有效多边形,则结果是该SRS中多边形的大地测量面积,单位为平方米。
如果几何图形是地理SRS中的有效多多边形,则结果是该SRS中多边形的大地测量面积之和,单位为平方米。
如果面积计算结果为+inf,则会出现ER_DATA_OUT_OF_RANGE错误。
如果几何图形的地理SRS的经度或纬度超出范围,则会发生错误:
如果经度值不在范围内(−180,180]时,会出现ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE错误(MySQL 8.0.12之前的ER_LONGIUTDE_OUT_OF_RANGE)。
如果纬度值不在范围内[−90,90],出现ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE错误(在MySQL 8.0.12之前的ER_LATITUDE_OUT_FO_RANGE)。
显示的范围以度为单位。由于浮点运算,精确范围限制略有偏差。

在MySQL 8.0.13之前,ST_Area()处理其参数,但有以下例外:
对于维度为0或1的参数,结果为0。
如果几何图形为空,则返回值为0而不是NULL。
对于几何图形集合,结果是所有组件的面积值之和。如果几何图形集合为空,则其面积将返回为0。
如果几何图形具有地理空间参考系统(SRS)的SRID值,则会出现ER_NOT_IMPLEMENTED_for_geographic_SRS错误。

报错解决方法:需要规范相关函数的使用,避免官档中描述的例外情况。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值