Mysql 整数()上的Laravel架构生成器INT(11)和无符号整数()上的INT(10)
为什么Laravel将整数列创建为INT(11),将无符号整数列创建为INT(10)Mysql 整数()上的Laravel架构生成器INT(11)和无符号整数()上的INT(10),mysql,laravel,database-schema,Mysql,Laravel,Database Schema,为什么Laravel将整数列创建为INT(11),将无符号整数列创建为INT(10) 因为无符号整数的最大值几乎可以是两倍大,所以它不应该是另一种情况吗?因为整数可以有符号时有负号 无符号整数将有10位数字,因此其显示长度为-10 如果负号为负号,有符号整数将需要一个空格。因此,在10个数字的顶部,您需要另一个数字作为符号。我也有同样的问题,我尝试将未签名的数字添加到id中,但没有帮助,它仍然是int(10)这是幼虫迁移创建的结构: CREATE TABLE `products` ( `i
因为无符号整数的最大值几乎可以是两倍大,所以它不应该是另一种情况吗?因为整数可以有符号时有负号 无符号整数将有10位数字,因此其显示长度为-10
如果负号为负号,有符号整数将需要一个空格。因此,在10个数字的顶部,您需要另一个数字作为符号。我也有同样的问题,我尝试将未签名的数字添加到id中,但没有帮助,它仍然是int(10)这是幼虫迁移创建的结构:
CREATE TABLE `products` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `product_user` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`product_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
UNIQUE KEY `product_user_unique` (`product_id`,`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
如果尝试添加外部约束,将返回错误:
alter table `product_user add constraint user_foreign
foreign key (`user_id`) references `users` (`id`) on delete cascade;
一般错误:1215无法添加外键约束
我的解决方法是从product_id、user_id中删除unsigned,这是因为在列有符号的情况下使用减号,这允许字段具有负整数。字段未签名时,最多可以有10位数字
alter table `product_user add constraint user_foreign
foreign key (`user_id`) references `users` (`id`) on delete cascade;