首页 > 解决方案 > 无法运行简单迁移:指定的密钥太长错误

问题描述

我用 symfony 和教义建立了一个新项目。我使用以下命令创建了一个数据库:

php bin/console doctrine:database:create

然后我使用以下命令创建了一个实体:

php bin/console make:entity

这是生成的代码:

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\UserRepository")
 */
class User
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $name;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $email;

    /**
     * @ORM\Column(type="string", length=24, nullable=true)
     */
    private $phone;

    /**
     * @ORM\Column(type="integer")
     */
    private $zip_code;

    public function getId()
    {
        return $this->id;
    }

    public function getName(): ?string
    {
        return $this->name;
    }

    public function setName(string $name): self
    {
        $this->name = $name;

        return $this;
    }

    public function getEmail(): ?string
    {
        return $this->email;
    }

    public function setEmail(string $email): self
    {
        $this->email = $email;

        return $this;
    }

    public function getPhone(): ?string
    {
        return $this->phone;
    }

    public function setPhone(?string $phone): self
    {
        $this->phone = $phone;

        return $this;
    }

    public function getZipCode(): ?int
    {
        return $this->zip_code;
    }

    public function setZipCode(int $zip_code): self
    {
        $this->zip_code = $zip_code;

        return $this;
    }
}

当我尝试运行迁移时,我不断收到以下错误:

php bin/console make:migration

php bin/console doctrine:migrations:migrate

错误:

SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes

这非常令人沮丧,因为我正在使用命令行生成代码和一个全新的项目,并且已经尝试解决这个问题很长一段时间了。

我很感激有关如何解决的任何建议。

标签: symfonydoctrine-orm

解决方案


这发生在我身上是因为我使用utf8mb4了排序规则(更具体地说utf8mb4_unicode_ci是 ),这现在是学说的默认设置。

https://github.com/symfony/recipes/blob/master/doctrine/doctrine-bundle/1.6/config/packages/doctrine.yaml#L13

奇怪的是,我只对unique字段有这个问题。我不得不将它们限制为 191 个字符,我在这里找到了答案:https ://laravel-news.com/laravel-5-4-key-too-long-error


推荐阅读