首页 > 解决方案 > 插入点列,ST_GeomFromText 列不能为空

问题描述

location我有这个 MySQL 表,这里只有重要的列

| user_details | 

CREATE TABLE `user_details` (
  `id` int NOT NULL AUTO_INCREMENT,
  `userId` int DEFAULT NULL,
  `customer` varchar(255) DEFAULT NULL,
  `country` varchar(255) DEFAULT NULL,
  `city` varchar(255) DEFAULT NULL,
  `address` varchar(255) DEFAULT NULL,
  `tags` varchar(255) DEFAULT NULL,
  `description` varchar(255) DEFAULT NULL,
  `location` point NOT NULL /*!80003 SRID 4326 */,
  `region` varchar(255) DEFAULT NULL,
  `createdAt` datetime DEFAULT NULL,
  `updatedAt` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `userId` (`userId`),
  SPATIAL KEY `user_details_location` (`location`),
  CONSTRAINT `user_details_ibfk_1` FOREIGN KEY (`userId`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |

位置列应该只支持 4326 个 SRID 点,但是当我尝试在其中插入时使用

INSERT INTO `user_details` 
            (`id`,`userId`,`location`,`createdAt`,`updatedAt`) 
    VALUES (1, 1, ST_GeomFromText('POINT(1 1)', 4326),NOW(),NOW());

它说

列“位置”不能为空

如果我调用 ST_GeomFromText('POINT(1 1)', 0) 而不是 ST_GeomFromText('POINT(1 1)', 4326) 它说

The SRID of the geometry does not match the SRID of the column 'location'. The SRID of the geometry is 0, but the SRID of the column is 4326. Consider changing the SRID of the geometry or the SRID property of the column.

问题是当我在 ST_GeomFromText 函数中设置 4326 时。我正在使用 MySQL 8。

标签: mysqlinsertspatialpoint

解决方案


好的,问题是我有一个插入前触发器(忘记了它),它正在检查 SRID,如果它不是 4326,它将强制它为 4326,问题是它做错了,所以只是改变了触发器正确地做到这一点。


推荐阅读