从 MySQL 8.0.24 开始,CAST() 和 CONVERT() 支持将几何值从一种空间类型转换为另一种空间类型,用于空间类型的某些组合。下面的列表显示了允许的类型组合,其中 “MySQL extension” 表示在 MySQL 中实现的转换超出了 SQL/MM 标准中的定义:■ Polygon (MySQL extension)■ MultiPoint (MySQL extension)■ LineString (MySQL extension)■ MultiLineString (MySQL extension)■ LineString (MySQL extension)■ Polygon (MySQL extension)■ MultiPolygon (MySQL extension)■ MultiLineString (MySQL extension)● 从 GeometryCollection 到:在空间类型转换中,GeometryCollection 和 GeomCollection 是相同结果类型的同义词。有些情况适用于所有空间类型转换,而有些情况仅适用于转换结果具有特定空间类型的情况。● 转换的结果与要转换的表达式在相同的 SRS 中。● 如果要转换的表达式为 NULL,则函数结果为 NULL。● 不允许使用 JSON_VALUE() 函数和指定空间类型的 RETURNING 子句转换空间类型。● 如果允许空间类型组合,但转换的表达式不是语法形式良好的几何图形,则会发生 ER_GIS_INVALID_DATA 错误。● 如果允许空间类型组合,但转换的表达式是未定义空间参考系统(SRS)中的语法形式良好的几何图形,则会发生 ER_SRS_NOT_FOUND 错误。● 如果要强制转换的表达式具有地理 SRS,但其经度或纬度不在范围内,则会发生错误:■ 如果经度值不在 (−180, 180] 范围内,就会出现 ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE 错误。■ 如果纬度值不在 [−90, 90] 范围内,就会出现 ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE 错误。范围以度数表示。如果一个 SRS 使用另一个单位,则该范围使用其单位中相应的值。由于浮点运算,确切的范围限制略有偏差。● 如果要转换的表达式是类型为 Point 的结构良好的几何图形,则函数的结果是此 Point。● 如果要转换的表达式是包含单个 Point 的格式良好的 MultiPoint 类型的几何图形,则函数的结果是此 Point。如果表达式包含不止一个 Point,就会出现 ER_INVALID_CAST_TO_GEOMETRY 错误。● 如果要转换的表达式是只包含一个 Point 的类型 GeometryCollection 的结构良好的几何图形,那么函数的结果就是这个 Point。如果表达式为空,包含多个 Point,或包含其他几何类型,将发生 ER_INVALID_CAST_TO_GEOMETRY 错误。● 如果要转换的表达式是结构良好的非 Point、MultiPoint、GeometryCollection 类型的几何图形,则会发生 ER_INVALID_CAST_TO_GEOMETRY 错误。当转换结果类型为 LineString 时,适用以下情况:● 如果要转换的表达式是 LineString 类型的结构良好的几何图形,则函数的结果是 LineString。● 如果要进行转换的表达式是没有内环的结构良好的多边形(Polygon)类型的几何图形,则函数结果是一个 LineString,它以相同的顺序包含外环的点。如果表达式有内环,就会出现 ER_INVALID_CAST_TO_GEOMETRY 错误。● 如果要转换的表达式是至少包含两个点的结构良好的 MultiPoint 类型的几何图形,则函数结果是一个 LineString,其中包含 MultiPoint 的点,其顺序是它们在表达式中出现的顺序。如果表达式只包含一个 Point,就会出现 ER_INVALID_CAST_TO_GEOMETRY 错误。● 如果要转换的表达式是包含单个 LineString 的格式良好的 MultiLineString 几何图形,则函数的结果是 LineString。如果表达式包含多个 LineString,就会出现 ER_INVALID_CAST_TO_GEOMETRY 错误。● 如果要转换的表达式是格式良好的几何图形,类型为 GeometryCollection,只包含一个 LineString,则函数的结果是 LineString。如果表达式为空、包含多个 LineString,或包含其他几何类型,将发生 ER_INVALID_CAST_TO_GEOMETRY 错误。● 如果要转换的表达式是 LineString、Polygon、MultiPoint、MultiLineString 或 GeometryCollection 类型之外的格式良好的几何图形,则会发生 ER_INVALID_CAST_TO_GEOMETRY 错误。https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html