Mysql 如何在ORM Symfony 4中将列的数据类型从字符串更改为文本?

Mysql 如何在ORM Symfony 4中将列的数据类型从字符串更改为文本?,mysql,doctrine-orm,doctrine,symfony4,Mysql,Doctrine Orm,Doctrine,Symfony4,我通过实体的注释定义了表信息。因此,我想将下面的列更改为文本,而不是字符串。所以我有这个: /** * @ORM\Column(type="string", length=255) */ private $category; 我把它改成这样: /** * @ORM\Column(type="text") */ private $category; 我希望它成为一个文本,所以在迁移之后我检查了我的数据库,它说它是一个长文本

我通过实体的注释定义了表信息。因此,我想将下面的列更改为文本,而不是字符串。所以我有这个:

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $category;
我把它改成这样:

    /**
     * @ORM\Column(type="text")
     */
    private $category;
我希望它成为一个文本,所以在迁移之后我检查了我的数据库,它说它是一个长文本。我不知道这是怎么可能的,但在提到我的迁移之前,我想知道如何使它成为一个文本而不是一个长文本

编辑:我正在查看迁移文件,看到以下内容:
$this->addSql('ALTER TABLE cabinet CHANGE category LONGTEXT NOT NULL')


我从来没有输入过LONGTEXT,所以我不知道原则是从哪里得到的。

答案似乎也是给出了文本的长度(我认为它被定义为一个固定值),所以你应该做
@ORM\Column(type=“TEXT”,length=65535)
而不是
@ORM\Column(type=“TEXT”,length=65535)。正因为如此,我才能够找到这个答案。

如果您想通过迁移进行更改,您需要注意转换为文本将基于当前列长度

$table = $schema->getTable("tablename");
$column = $table->getColumn("columnname");
 /** There you need set size of text that you want to use
  *  To TINYTEXT => length =  0 - 255
  *  To TEXT => length = 256 - 65535
  *  To MEDIUMTEXT = 65536 - 16777215
  **/
$column->setLength('65535');
$column->setType(Type::getType(Types::TEXT))

仅当当前类型不是Types::TEXT时,它才会更改当前类型。如果文本是tinytext,并且需要将其设置为text,则首先需要将类型更改为string,设置长度,然后再将其设置回text。

请注意,
65535
是行的正常“最大长度”,而不是列的长度。请参阅文档以了解和。@rkeet这是真的,如果我不清楚,请原谅。你指出这一点,值得投一票。