如何在 ORM Symfony 4 中将列的数据类型从 STRING 更改为 TEXT?
How to change the data type of a column from STRING to TEXT in ORM Symfony 4?
我的 table 信息是通过实体的注释定义的。所以我想将以下列更改为文本而不是字符串。所以我有这个:
/**
* @ORM\Column(type="string", length=255)
*/
private $category;
我把它改成这样:
/**
* @ORM\Column(type="text")
*/
private $category;
我原以为它会变成一个文本,所以在迁移后我检查了我的数据库,它说它是一个长文本。我不知道这是怎么可能的,但在引用我的迁移之前,我想知道如何将它变成文本而不是长文本。
编辑:我正在查看迁移文件,我看到了这个:
$this->addSql('ALTER TABLE cabinet CHANGE category category LONGTEXT NOT NULL');
我从来没有输入过 LONGTEXT,所以我不知道 Doctrine 从哪里得到它。
答案似乎也是给出 TEXT 的长度(我认为它被定义为一个固定值),所以你应该 @ORM\Column(type="text", length=65535)
而不是 @ORM\Column(type="text")
。因为这个 .
我能找到这个答案
如果您想通过迁移进行更改,您需要注意转换为文本将基于当前列的长度;
$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,你需要将它设置为文本,你需要先将类型更改为字符串,设置长度,然后再将其设置回文本。
我的 table 信息是通过实体的注释定义的。所以我想将以下列更改为文本而不是字符串。所以我有这个:
/**
* @ORM\Column(type="string", length=255)
*/
private $category;
我把它改成这样:
/**
* @ORM\Column(type="text")
*/
private $category;
我原以为它会变成一个文本,所以在迁移后我检查了我的数据库,它说它是一个长文本。我不知道这是怎么可能的,但在引用我的迁移之前,我想知道如何将它变成文本而不是长文本。
编辑:我正在查看迁移文件,我看到了这个:
$this->addSql('ALTER TABLE cabinet CHANGE category category LONGTEXT NOT NULL');
我从来没有输入过 LONGTEXT,所以我不知道 Doctrine 从哪里得到它。
答案似乎也是给出 TEXT 的长度(我认为它被定义为一个固定值),所以你应该 @ORM\Column(type="text", length=65535)
而不是 @ORM\Column(type="text")
。因为这个
如果您想通过迁移进行更改,您需要注意转换为文本将基于当前列的长度;
$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,你需要将它设置为文本,你需要先将类型更改为字符串,设置长度,然后再将其设置回文本。