无法运行简单迁移:指定密钥太长错误

时间:2018-07-26 12:58:25

标签: symfony doctrine-orm

我建立了一个包含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

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

我感谢有关解决方法的任何建议。

1 个答案:

答案 0 :(得分:0)

这发生在我身上,是因为我使用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