Symfony 数组规则到文本字段(而不是长文本)

Symfony 数组规则到文本字段(而不是长文本),symfony,doctrine,Symfony,Doctrine,使用ORM原则,我注意到数组原则会在数据库中生成一个长文本字段。有没有办法生成文本字段 谢谢 /** * @var array * * @ORM\Column(name="my_field", type="array", nullable=true) */ private $myField; 如果有人偶然发现这个问题,请记录:文本字段的最大大小和存储要求是两件截然不同的事情 在MySQL(我猜还有其他SQL引擎)中,可变长度字符串类型(如TEXT或LONGTEXT)使用长度前缀加数据存

使用ORM原则,我注意到数组原则会在数据库中生成一个长文本字段。有没有办法生成文本字段

谢谢

/**
 * @var array
 *
 * @ORM\Column(name="my_field", type="array", nullable=true)
 */
private $myField;
如果有人偶然发现这个问题,请记录:文本字段的最大大小存储要求是两件截然不同的事情

在MySQL(我猜还有其他SQL引擎)中,可变长度字符串类型(如TEXT或LONGTEXT)使用长度前缀数据存储。长度前缀需要1到4个字节,具体取决于数据类型

因此,基本上,文本和长文本之间的区别只是字段可以容纳的字符串的最大长度。在磁盘上,它将采用相同的大小(除了两个或三个字节)

TINYBLOB,TINYTEXT-->L+1字节,其中L<2^8
BLOB,文本-->L+2字节,其中L<2^16
MEDIUMBLOB,MEDIUMTEXT-->L+3字节,其中L<2^24
LONGBLOB,LONGTEXT-->L+4字节,其中L<2^32
哦,还要注意角色集。特别是,在使用utf8 Unicode字符集时,必须记住并非所有字符都使用相同的字节数,每个字符最多需要三个字节


来源:

答案是为您的字段定义一个长度,例如

/**
 * @var array
 *
 * @ORM\Column(name="my_field", type="array", length=256, nullable=true)
 */
private $myField;    
将长度设置为256-65535之间的值将为您提供一个文本字段。中断点在条令文件中定义:

如果列长度小于或等于2^8-1=255,则选择[TINYTEXT]

[选择文本]如果列长度小于或等于2^16-1=65535

[选择MEDIUMTEXT]如果列长度小于或等于2^24-1=16777215

[选择LONGTEXT]如果列长度小于或等于2^32-1=4294967295或为空


根据Doctrine的文档,“该类型将始终在内部映射到数据库供应商的文本类型”。。。我想既然你不能真正限制数组的大小,最好使用longtext;为什么要使用文本?它们是一样的,只是长度的问题。同意前面的评论。否则你可以自定义类型我想使用文本,因为它在数据库中比longtext()要轻2个字节。不要混淆最大尺寸和存储要求。。。
/**
 * @var array
 *
 * @ORM\Column(name="my_field", type="array", length=256, nullable=true)
 */
private $myField;