news 2026/9/4 8:46:44

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/9/3 1:56:11

提示工程监控预警系统的可视化设计:这5个仪表盘让问题一目了然

提示工程监控预警系统的可视化设计:这5个仪表盘让问题一目了然 关键词 提示工程(Prompt Engineering)、监控预警(Monitoring & Alerting)、数据可视化(Data Visualization)、仪表盘设计(Dashboard Design)、异常检测(Anomaly Detection)、AI运维(AI Operatio…

作者头像 李华
网站建设 2026/8/25 22:25:38

基于与或非门的全加器实现:完整指南

从零搭建全加器&#xff1a;用与或非门实现二进制加法的底层逻辑你有没有想过&#xff0c;计算机是如何做加法的&#xff1f;我们每天都在敲代码、调算法&#xff0c;但很少有人真正关心“112”在硬件层面是怎么完成的。其实&#xff0c;这一切的背后&#xff0c;都始于一个看似…

作者头像 李华
网站建设 2026/8/30 1:43:44

抗干扰设计:工业环境下LCD1602稳定性优化策略

工业级稳定显示&#xff1a;如何让 LCD1602 在强干扰环境下“坚如磐石”在自动化产线的控制柜里&#xff0c;你是否曾遇到过这样的场景&#xff1f;——继电器一吸合&#xff0c;LCD1602 屏幕突然抖动、字符错乱&#xff0c;甚至整屏变黑&#xff1b;重启设备后又恢复正常&…

作者头像 李华
网站建设 2026/9/1 7:12:52

电缆敷设,长云科技电缆输送机多台联控,专业解决方案提供

在长距离隧道、大型综合管廊的电缆敷设中&#xff0c;核心挑战已从提供单点动力&#xff0c;转变为如何让数十台甚至更多输送机协同工作&#xff0c;像一列精准的列车般同步运行。长云科技提供的多台联控专业解决方案&#xff0c;正是为此类系统性工程而生。该方案的核心并非简…

作者头像 李华
网站建设 2026/9/1 19:57:44

机动绞磨机,长云科技电信工程牵引绞磨

在电信线路架设与光缆施工中&#xff0c;常面临野外无市电、地形复杂、缆线需高空或长距离布放的挑战。汽油/柴油机动绞磨机凭借其独立动力与强劲牵引能力&#xff0c;成为此类场景下不可或缺的核心装备。 一台针对电信工程优化的机动绞磨机&#xff0c;其核心价值在于解决特定…

作者头像 李华