使用ORM Doctrine,我注意到数组Doctrine在数据库中生成一个longtext字段。有没有办法生成文本字段?
由于
/**
* @var array
*
* @ORM\Column(name="my_field", type="array", nullable=true)
*/
private $myField;
答案 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