SQL主键非空错误修复求助——GTA V FiveM服务器数据库表创建失败
SQL主键非空错误修复求助——GTA V FiveM服务器数据库表创建失败
嘿,我一看你这SQL就知道问题出在哪了——这是MySQL主键约束的经典坑!
你提供的三个表创建语句里,都犯了同一个错误:把plate/stash设为**主键(PRIMARY KEY)**的同时,又给它们加了DEFAULT NULL属性。但MySQL的主键要求必须满足「非空 + 唯一」,允许为空的字段根本没法当主键,这就是你报错的根源。另外你的trunkitems表语句最后被截断了,我也帮你补全了。
我直接给你修复好的完整SQL代码,拿去就能用:
CREATE TABLE IF NOT EXISTS `gloveboxitems` ( `id` int(11) NOT NULL AUTO_INCREMENT, `plate` varchar(255) NOT NULL, -- 去掉了DEFAULT NULL,强制非空 `items` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, PRIMARY KEY (`plate`), KEY `id` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1; CREATE TABLE IF NOT EXISTS `stashitems` ( `id` int(11) NOT NULL AUTO_INCREMENT, `stash` varchar(255) NOT NULL, -- 去掉了DEFAULT NULL,强制非空 `items` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, PRIMARY KEY (`stash`), KEY `id` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1; CREATE TABLE IF NOT EXISTS `trunkitems` ( `id` int(11) NOT NULL AUTO_INCREMENT, `plate` varchar(255) NOT NULL, -- 去掉了DEFAULT NULL,强制非空 `items` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, PRIMARY KEY (`plate`), KEY `id` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1; -- 补全了截断的部分
另外给你提个可选优化方案:如果你的FiveM脚本还没固化依赖plate作为主键的逻辑,其实可以把自增的id设为主键,把plate/stash设为唯一索引,这样后续做数据关联、修改会更灵活,示例如下:
CREATE TABLE IF NOT EXISTS `gloveboxitems` ( `id` int(11) NOT NULL AUTO_INCREMENT, `plate` varchar(255) NOT NULL, `items` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `plate` (`plate`) -- 用唯一索引保证plate不重复 ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
这个方案更符合常规数据库设计,但如果你的脚本已经写死了用plate查数据,那还是用第一个修复版本更稳妥,避免改脚本。
备注:内容来源于stack exchange,提问作者Michael S
相关产品推荐
相关产品推荐

