如何为字符串最大长度禁用 doctrine2 实体中的隐式字符串修剪?

How to disable implicit string trimming in doctrine2 entity for string max length?

使用 dontrine2,我有一个具有 属性 并带有以下注释的实体:

/**
 * @var string
 * @Column(type="string", length=4, nullable=false)
 */
protected $someProperty;

现在,当 属性 设置为 foobar 时,字符串不会出现异常,而是被修剪为前四个字符,即 foob,然后将其存储到数据库中.

我知道我可以在 setter 中实施长度检查。然而,我会在两个我宁愿避免的地方配置字符串的长度。

我也可以使用验证,但这也会使配置加倍。

我发现 doctrine2 隐式缩短了字符串令人困惑,但是当 nullable 为 false 时将值设置为 null 时,我得到一个异常。这似乎不一致。

我可以禁用修剪并强制异常吗?还是我必须自己验证实体?

Doctrine 不做任何验证,也不做任何字符串截断。您获得的所有异常都来自数据库层。

当您尝试将空值插入不允许为空的列时,数据库查询失败。

当您尝试插入比列定义中定义的长度更长的字符串值时,MySql 会自动截断它。您可以更改此行为,配置 MySql 以使用严格模式。