强制原则数据类型选择,从 tinytext 到 varchar

Force doctrine datatype choice, from tinytext to varchar

我用固定长度的短文本属性描述了我的实体。当我使用命令 make:migration 时,它会生成数据类型为 TINYTEXT 的 SQL 代码。在我的例子中,使用 VARCHAR 会更准确,因为我的属性具有较短的固定长度。

我搜索过,但没有找到令人满意的解决方案。

我想指示 Doctrine 将 VARCHAR 用于此文本。可能吗?怎么样?

如果我不能:我在生成的 php 迁移代码中看到它建议让我自己在生成的 SQL 上进行编辑。我可以在这里把TINYTEXT改成VARCHAR吗?学说会在未来的修改中考虑到它吗?

<?php
...
/**
 * @ORM\Entity(repositoryClass=UserRepository::class)
 */
class User
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="text", length=64, unique = true)
     */
    private $mail;

    /**
     * @ORM\Column(type="text", length=64)
     */
    private $hash;

    /**
     * @ORM\Column(type="text", length=32)
     */
    private $salt;

    ...
}

MySQL

CREATE TABLE user (
    id INT AUTO_INCREMENT NOT NULL, 
    mail TINYTEXT NOT NULL, 
    hash TINYTEXT NOT NULL, 
    salt TINYTEXT NOT NULL, 
    UNIQUE INDEX UNIQ_8D93D6495126AC48 (mail), PRIMARY KEY(id)
) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB

学说将 type="text", length=64 映射到 mysql 的 TINYTEXT

您正在查找字符串类型。

/**
 * @ORM\Column(type="string", length=64, unique=true)
 */
private $mail;

这将映射到 VARCHAR(64)

请参阅 https://www.doctrine-project.org/projects/doctrine-dbal/en/2.10/reference/types.html#string 以获取更多参考。