当我做app/console doctrine:schema:update --force
时
我收到了这条消息:
$ app/console doctrine:schema:update --force
Updating database schema...
[Doctrine\DBAL\Exception\DriverException]
An exception occurred while executing 'ALTER TABLE recipes ADD has_video TINYINT(1) DEFAULT '0' NOT NULL, CHANGE photo photo VARCHAR(255) DEFAULT NULL':
SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'photo' at row 4268
[Doctrine\DBAL\Driver\PDOException]
SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'photo' at row 4268
[PDOException]
SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'photo' at row 4268
doctrine:schema:update [--complete] [--dump-sql] [-f|--force] [--em [EM]]
所以我尝试在我的实体中增加列的大小:
/**
* @var string
*
* @ORM\Column(name="photo", type="string", length=310, nullable=true)
* @Expose
* @Groups({"All", "GlobalStats"})
*/
private $photo;
我将它增加到310,但它仍然不起作用。 为什么我不能更新我的架构?
答案 0 :(得分:2)
您可以找到所有DBAL类型here in the Doctrine 2 documentation chapter: 8. Types。
对于string type,您会发现以下评论:
数据库供应商对变化字符串的最大长度有不同的限制。如果超出允许的最大长度,Doctrine会在内部将
string
类型映射到供应商的text
类型。 (...)
对于MySQL,这个最大值为255个字符,但根据文档,当超过此值时,它应该使用文本。也许你的照片长度超过310个字符?
将数据类型设置为text
,就像您所做的那样有效,因为根据文档:
映射并转换没有最大长度的字符串数据。如果您不知道要存储的数据的最大长度,则应考虑使用此类型。
所以这是一个合适的解决方案。 请记住,如果定义数据库列的长度,它可能会更优化(性能更好)。
答案 1 :(得分:0)
我将类型更改为text
/**
* @var text
*
* @ORM\Column(name="photo", type="text", nullable=true)
* @Expose
* @Groups({"All", "GlobalStats"})
*/
private $photo;
根据documentation:"转换没有最大长度的字符串数据。"