mysql - 插入点列,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。
解决方案
好的,问题是我有一个插入前触发器(忘记了它),它正在检查 SRID,如果它不是 4326,它将强制它为 4326,问题是它做错了,所以只是改变了触发器正确地做到这一点。
推荐阅读
- python - PyQt5 线程排序
- rest - 如何修改这个 M 查询以使 PowerBI 从一个 REST API 中同时获取所有页面?
- html - 在不操作显示属性的情况下隐藏 HTML 内容的正确方法
- javascript - 点击按钮后如何在 Playwright 中捕获请求和响应?
- pine-script - 策略中的交易时间
- react-native - 反应原生 iOS - 使用 lottie 文件的启动画面
- function - 检测到堆栈粉碎(未知)
- java - 如何使用 javax 验证来验证 java 普通方法
- angular - firebase 和 firestore 更新/身份验证期间的不可理解的行为
- spring - @RequestParam 从邮递员返回空值