数组学说到文本字段(而不是longtext)

时间:2015-09-28 09:09:08

标签: symfony doctrine

使用ORM Doctrine,我注意到数组Doctrine在数据库中生成一个longtext字段。有没有办法生成文本字段?

由于

/**
 * @var array
 *
 * @ORM\Column(name="my_field", type="array", nullable=true)
 */
private $myField;

2 个答案:

答案 0 :(得分:2)

答案是为你的领域定义一个长度,例如

/**
 * @var array
 *
 * @ORM\Column(name="my_field", type="array", length=256, nullable=true)
 */
private $myField;    

将长度设置为256-65535之间的值将为您提供TEXT字段。断点在Doctrine文档中定义:

http://doctrine-orm.readthedocs.org/projects/doctrine-dbal/en/latest/reference/types.html#id107

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

[TINYTEXT]。

     如果列长度小于或等于2 ^ 16 - 1 = 65535,则选择

[TEXT]。

     如果列长度小于或等于2 ^ 24 - 1 = 16777215,则

选择[MEDIUMTEXT]。

     

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

答案 1 :(得分:1)

只是为了记录,如果有人发现此问题 最大尺寸 存储要求 文本字段是两个非常不同的东西。

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

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

TINYBLOB, TINYTEXT             --> L + 1 bytes, where L < 2^8
BLOB, TEXT                     --> L + 2 bytes, where L < 2^16
MEDIUMBLOB, MEDIUMTEXT         --> L + 3 bytes, where L < 2^24
LONGBLOB, LONGTEXT             --> L + 4 bytes, where L < 2^32
  

哦,小心字符集。特别是,在使用utf8 Unicode字符集时,必须记住,并非所有字符都使用相同的字节数,每个字符最多需要三个字节

来源:https://dev.mysql.com/doc/refman/5.1/en/storage-requirements.html