MySQL 8.0插入Multipolygon时ST_GeomFromText报3037错误如何解决
错误原因
- 核心问题为函数使用不匹配:
ST_GeomFromText()仅支持解析WKT(文本格式的GIS标准描述) 输入,你提供的待插入数据是0x开头的WKB(二进制编码的GIS标准格式)十六进制串,传入文本解析函数自然会报格式无效错误。 - 你使用的MySQL 8.0版本原生支持WKB格式解析,仅需要更换对应函数即可解决问题。
解决方案
- 方案1:使用
ST_GeomFromWKB()函数解析当前的二进制数据,若WKB数据存储在变量@XX中,插入语句修改为:
insert into t1 values (ST_GeomFromWKB(@XX));
若直接插入给定的十六进制串,直接将串作为参数传入即可:
insert into t1 values (ST_GeomFromWKB(0x0000000001060000000100000001030000003F00000001000000FDFFFF676FE2B9C0FDFFFF674DB6A4C00100000004000064DAD6B9C000000040C2BBA4C0010000000100000CFED2B9C0FDFFFF6720BEA4C001000000F8FFFFD75BC7B9C0FDFFFFA720C5A4C001000000FCFFFF7B9FC2B9C0F8FFFFF74DCBA4C001000000F8FFFF77A6AEB9C0FDFFFFA7C6D4A4C0010000000100002C46A3B9C0F2FFFF873BDAA4C001000000FCFFFF3BE098B9C003000098DDDEA4C001000000FBFFFF4F1C93B9C0FDFFFFE7D9E1A4C001000000010000ACD993B9C0F0FFFF6FF5ECA4C001000000000000C03D99B9C0F8FFFFF7FA0EA5C001000000F8FFFF970A9CB9C0FBFFFF8F9822A5C001000000FBFFFF0FE8A4B9C000000040A44CA5C001000000000000E0F8A9B9C0FDFFFFE7EA61A5C001000000000000C07CB0B9C0030000581E7CA5C001000000FCFFFF3B7AB3B9C000000000BA88A5C001000000000000E0F0B4B9C0F0FFFF2F178BA5C001000000FDFFFFC7DAB6B9C0F8FFFFF7E08BA5C001000000FCFFFF3B6EB8B9C003000098DD8AA5C00100000003000058B5BCB9C0FBFFFF8F6F83A5C001000000010000CC6DC9B9C0FDFFFF67BEA3A5C0010000000100000CF5D0B9C0F0FFFF6F46B7A5C001000000FBFFFFCF80D4B9C0FDFFFF2704BDA5C001000000FDFFFFE7C7D8B9C0FDFFFFE7B5C7A5C001000000FFFFFFB384E2B9C0F0FFFF6F46B7A5C001000000FDFFFFE7E7E9B9C00000004062ACA5C0010000000100000CDEE5B9C0EDFFFF57F1A1A5C001000000FCFFFF9B26F3B9C0EAFFFF7F7E90A5C001000000F8FFFFB730F6B9C0EDFFFF177EA1A5C001000000FBFFFF8F0FF9B9C0FBFFFF4F3A9EA5C001000000FBFFFF4FD9F9B9C0FBFFFF4FB4A0A5C0010000000100006C0AFDB9C0F8FFFF77439BA5C0010000000100000CBF05BAC0F8FFFF77418FA5C001000000F8FFFFB7590CBAC0EDFFFF57A685A5C001000000010000ACAA14BAC0FDFFFF27C27AA5C001000000FCFFFFDBC525BAC000000040E262A5C001000000F5FFFF1FFC24BAC0F5FFFF5F1B60A5C001000000F5FFFFFF6D30BAC0FDFFFFE71957A5C001000000000000E0AD2FBAC0F2FFFF07E652A5C001000000F8FFFFD74139BAC0EAFFFFFF234BA5C0010000000100002C773CBAC0FDFFFF670049A5C001000000F8FFFF378240BAC0F8FFFFB7EF44A5C001000000FDFFFF87912DBAC0FBFFFFCFF3E7A4C001000000F6FFFF8B472BBAC0FBFFFF0F74E9A4C001000000FCFFFF1B0E2ABAC0F2FFFF4730E1A4C001000000F9FFFF838D28BAC0F8FFFF3752DEA4C001000000F9FFFF83B025BAC0000000C0BFDDA4C001000000FCFFFF5BEA19BAC0EAFFFFFFE4A0A4C0010000006476F4E9151ABAC0CA72E79FECA0A4C001000000F5FFFFBF2C1BBAC0050000701DA1A4C001000000FFFFFFD3271ABAC0F8FFFF37AC9CA4C001000000000000807814BAC0F2FFFF070272A4C001000000FBFFFFAF1E13BAC0050000F0AE72A4C001000000FCFFFFFBA80DBAC0F5FFFFDFC54EA4C001000000F6FFFF4B4104BAC0030000985B51A4C001000000FFFFFF535F01BAC0F0FFFFAF8A52A4C001000000F5FFFF3F8102BAC0F5FFFF9F0E5AA4C001000000030000382408BAC0000000803E77A4C001000000FDFFFF87B00ABAC0000000C06288A4C001000000FDFFFFE78B0DBAC000000000299EA4C001000000FFFFFF53BDFCB9C0F0FFFFAFA1A7A4C001000000FCFFFF1B79ECB9C0F8FFFF7789B0A4C001000000FDFFFF676FE2B9C0FDFFFF674DB6A4C0));
- 方案2:若后续你拿到的是WKT文本格式(即
MULTIPOLYGON(((...)))结构的文本串),再使用ST_GeomFromText()函数即可,使用前需确认WKT语法符合OGC标准,无坐标闭合、格式书写类错误。
额外校验说明:如果更换函数后仍报错,可先调用
ST_IsValid()函数校验几何对象合法性,部分WKB数据可能存在自相交、点顺序错误等不符合GIS规范的问题,可通过ST_MakeValid()函数修复后再插入。
内容的提问来源于stack exchange,提问作者wjh
相关产品推荐
相关产品推荐

