我正在创建一个Laravel 5.4应用程序的开发版本,虽然没有完整的数据库,但它正在运行。
当我运行php artisan migrate
时,它生成了大部分表,但有些表失败了,但没有错误。
当我尝试通过phpMyAdmin导入时,出现错误:
#1071 - 指定的密钥太长;最大密钥长度为767字节
...在许多表上,碰巧是迁移无法创建的表(值得注意的是,某些表有多个键,所以错误本身至少对我来说 - 有点模糊)。
举个例子:
CREATE TABLE `categories` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`parent_id` int(10) unsigned DEFAULT NULL,
`order` int(11) NOT NULL DEFAULT '1',
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`slug` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `categories_slug_unique` (`slug`),
KEY `categories_parent_id_foreign` (`parent_id`),
CONSTRAINT `categories_parent_id_foreign` FOREIGN KEY (`parent_id`) REFERENCES `categories` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
此处,name
和slug
列符合长度标准,但仍会触发错误。
public function up()
{
// Create table for storing categories
Schema::create('categories', function (Blueprint $table) {
$table->increments('id');
$table->integer('parent_id')->unsigned()->nullable()->default(null);
$table->foreign('parent_id')->references('id')->on('categories')->onUpdate('cascade')->onDelete('set null');
$table->integer('order')->default(1);
$table->string('name');
$table->string('slug')->unique();
$table->timestamps();
});
}
categories
和data_types
表中都有“up”函数,但Laravel在运行php artisan migrate
时忽略它们或在运行{{1}时触发错误}:
[照亮\数据库\ QueryException]
SQLSTATE [42S02]:找不到基表或视图:1146表 'database.data_types'不存在(SQL:alter tablephp artisan migrate:refresh
删除data_types
)
生产应用程序使用MySQL 5.7,而开发应用程序使用5.6,我理解这是原因。
任何人都知道如何在不使用Docker的情况下解决这个问题?