MySQL:指定密钥太长;最大密钥长度为767字节

时间:2017-11-30 09:37:09

标签: php mysql laravel-5

我正在创建一个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;

此处,nameslug列符合长度标准,但仍会触发错误。

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();
    });
}

categoriesdata_types表中都有“up”函数,但Laravel在运行php artisan migrate时忽略它们或在运行{{1}时触发错误}:

  

[照亮\数据库\ QueryException]
  SQLSTATE [42S02]:找不到基表或视图:1146表   'database.data_types'不存在(SQL:alter table   php artisan migrate:refresh删除data_types

生产应用程序使用MySQL 5.7,而开发应用程序使用5.6,我理解这是原因。

任何人都知道如何在不使用Docker的情况下解决这个问题?

0 个答案:

没有答案