Mysql 整数()上的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

为什么Laravel将整数列创建为INT(11),将无符号整数列创建为INT(10)


因为无符号整数的最大值几乎可以是两倍大,所以它不应该是另一种情况吗?

因为整数可以有符号时有负号

无符号整数将有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;