news 2026/4/8 23:08:00

MySQL【bug】- spatial key

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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;

解决方法:

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/5 17:49:29

结合Kibana发挥es数据库日志分析最大效能:操作指南

用 Kibana 挖掘 Elasticsearch 日志的真正价值&#xff1a;从配置到实战的一站式指南你有没有过这样的经历&#xff1f;线上服务突然告警&#xff0c;CPU飙高、接口超时&#xff0c;你一头扎进服务器日志里翻找线索&#xff0c;却在成千上万行文本中迷失方向。等终于定位问题&a…

作者头像 李华
网站建设 2026/3/19 8:59:48

一文说清Keil5 Debug调试怎么使用于工控通信协议

深入工控通信调试&#xff1a;用Keil5玩转Modbus、CANopen等协议的精准排错在工业自动化现场&#xff0c;一个看似简单的通信故障&#xff0c;可能让整条产线停摆。你有没有遇到过这样的场景&#xff1a;设备偶尔“失联”&#xff0c;Modbus帧莫名其妙被丢弃&#xff1b;或者CA…

作者头像 李华
网站建设 2026/4/5 17:04:59

一文说清电路仿真circuits网页版中的反馈电路原理

从零搞懂反馈电路&#xff1a;用网页仿真玩转负反馈与正反馈 你有没有试过搭一个放大电路&#xff0c;结果输出不是信号被削了顶&#xff0c;就是莫名其妙地“自己振起来”&#xff1f;又或者想做个方波发生器&#xff0c;可电路死活不起振&#xff1f; 这些问题的根源&#…

作者头像 李华
网站建设 2026/4/7 9:20:09

基于SSM的智慧养老云服务平台

一、系统概述 基于 SSM&#xff08;Spring、Spring MVC、MyBatis&#xff09;框架构建的智慧养老云服务平台&#xff0c;整合云计算、物联网、大数据等技术&#xff0c;为养老机构、社区和居家老人提供全方位、智能化的养老服务解决方案。平台实现了老人信息管理、健康监测、服…

作者头像 李华
网站建设 2026/4/4 5:33:11

基于SSM的高校资源管理系统设计与实现

一、系统简介 基于 SSM&#xff08;Spring、Spring MVC、MyBatis&#xff09;框架的高校资源管理系统&#xff0c;旨在整合高校内各类资源&#xff0c;实现资源的高效调配、合理利用与科学管理。通过该系统&#xff0c;能够有效解决高校在教学资源、科研资源、后勤资源等管理过…

作者头像 李华