当前位置: 首页 > news >正文

MySQL【bug】- spatial key

【bug1】

MySQL建Spatial索引的前提条件是列定义NOT NULL,而当location列中有'GEOMETRYCOLLECTION EMPTY '的值时,这里'GEOMETRYCOLLECTION EMPTY'变相绕过了这个限制,会导致报错。

插入空集合GEOMETRYCOLLECTION EMPTY,空集合占一行空间,语义上“我知道这里该有几何,但当前没有数据”。

与 NULL 的区别

场景

存储值

ST_IsEmpty

ST_AsText

NULL

NULL

NULL

GEOMETRYCOLLECTION EMPTY

1

GEOMETRYCOLLECTION EMPTY

重建表也无法进行修复

CREATE TABLE `spatial_table` ( `id` int NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `location` geometry NOT NULL SRID 4326, `number` varchar(20) NOT NULL DEFAULT '7425346', PRIMARY KEY (`id`), UNIQUE KEY `number` (`number`), SPATIAL KEY `location_index` (`location`) ); INSERT INTO spatial_table (id, name, location, number) VALUES (1, 'Place A', ST_GeomFromText('POINT(1 1)', 4326), '7425341'), (2, 'Place B', ST_GeomFromText('LINESTRING(1 1,2 2,3 3)', 4326), '7425342'), (3, 'Place C', ST_GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7,5 5))', 4326), '7425343'), (4, 'Place D', ST_GeomFromText('MULTIPOINT((0 0),(20 20),(60 60))', 4326), '7425344'), (5, 'Place E', ST_GeomFromText('GEOMETRYCOLLECTION(POINT(10 10),POINT(30 30),LINESTRING(15 15,20 20))', 4326), '7425345'), (6, 'Place F', ST_GeomFromText('GEOMETRYCOLLECTION(POINT(10 10),POINT(30 30),LINESTRING(15 15,20 20))', 4326), '7425348'), (7, 'Beijing', ST_GeomFromText('POINT(39.9042 116.4074)', 4326), '7425347'), (8, '<null>', ST_GeomFromText('GEOMETRYCOLLECTION EMPTY', 4326), '7425346'); SELECT id,name,st_astext(location),number From spatial_table;

解决方法:删除这些行并重建表

【bug2】

先对含SPATIAL KEY的表做过ALTER TABLE → R-tree根页指针错乱,后续UPDATE/DELETE走空间索引时找不到记录 → 报Record in index ... not found。在MySQL Server 5.7.498.0.418.4.49.2.0版本中修复。

官方文档:https://bugs.mysql.com/bug.php?id=93728

CREATE TABLE tab ( c1 INT NOT NULL PRIMARY KEY, c2 POINT NOT NULL SRID 4326, c3 LINESTRING NOT NULL SRID 4326, c4 POLYGON NOT NULL SRID 4326, c5 GEOMETRY NOT NULL SRID 4326, SPATIAL KEY idx2 (c2), SPATIAL KEY idx3 (c3), SPATIAL KEY idx4 (c4), SPATIAL KEY idx5 (c5) ) ENGINE = InnoDB; INSERT INTO tab(c1,c2,c3,c4,c5) VALUES (1, ST_GeomFromText('POINT(10 10)', 4326), ST_GeomFromText('LINESTRING(5 5,20 20,30 30)', 4326), ST_GeomFromText('POLYGON((30 30,40 40,50 50,30 50,30 40,30 30))', 4326), ST_GeomFromText('POLYGON((30 30,40 40,50 50,30 50,30 40,30 30))', 4326)); INSERT INTO tab(c1,c2,c3,c4,c5) VALUES (2, ST_GeomFromText('POINT(20 20)', 4326), ST_GeomFromText('LINESTRING(20 20,30 30,40 40)', 4326), ST_GeomFromText('POLYGON((40 50,40 70,50 100,70 100,80 80,70 50,40 50))', 4326), ST_GeomFromText('POLYGON((40 50,40 70,50 100,70 100,80 80,70 50,40 50))', 4326)); ALTER TABLE tab ADD COLUMN new_uniq_col INT NOT NULL AUTO_INCREMENT FIRST, ADD UNIQUE INDEX uniq_idx(new_uniq_col), DROP PRIMARY KEY; DELETE From tab;

解决方法:

  • 升级版本
  • 重建表再重新导入数据

http://www.cnnetsun.cn/news/526496.html

相关文章:

  • 提示工程监控预警系统的可视化设计:这5个仪表盘让问题一目了然
  • Java Web 服装生产管理设计与实现系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】
  • 基于与或非门的全加器实现:完整指南
  • 抗干扰设计:工业环境下LCD1602稳定性优化策略
  • 电缆敷设,长云科技电缆输送机多台联控,专业解决方案提供
  • 机动绞磨机,长云科技电信工程牵引绞磨
  • 基于SSM的分布式网上购物系统
  • 时间戳 转换工具(使用claude code开发)
  • 统一监控多个ES集群:可视化管理工具实战解析
  • 深入理解ISR:中断服务程序的深度剖析与优化
  • 【2026年精选毕业设计:智慧社区二手物品共享平台设计与实现(含论文+源码+PPT+开题报告+任务书+答辩讲解)】
  • 模具快速修复革命:告别重新开模,拥抱3D扫描与逆向工程
  • 开发者必备语音工具:5个免配置TTS镜像,开箱即用支持Python调用
  • Java SpringBoot+Vue3+MyBatis 大学生就业招聘系统系统源码|前后端分离+MySQL数据库
  • 基于SpringBoot+Vue的医院管理系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】
  • k8s配置habor作为镜像地址之后,如果harbor中没有镜像,如何设置自动从阿里云官方镜像仓库下载
  • 解决Azure App Service中的枚举问题
  • 嵌入式系统中的上下文切换:STM32F103RB 的挑战
  • 计算机毕业设计springboot旅行社信息管理系统 SpringBoot 驱动的“行游通”智慧旅游管理平台 基于SpringBoot 的“云游社”一体化旅游业务中枢
  • 飘香水果购物网站信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
  • 新手教程:如何在本地运行es实例
  • 数字孪生平台集成:设备通信协议对接详解
  • 新手必看:Elasticsearch可视化工具基础查询入门指南
  • 面向对象编程(OOP)的核心范式解析及其在PHP语言中的全面实现
  • 低代码移动测试平台推荐
  • 从0到1开发一个商用 Agent(智能体),把企业级 Agent 从“搭出来”到“跑起来”!!
  • 快速理解UDS诊断服务ID与子功能映射关系
  • ModbusTCP报文解析图解说明(带实例分析)
  • 在GNU Radio中利用SDR实现AM解调项目应用
  • 亚马逊云渠道商:EC2 成本优化的常见问题及解决方案