插入原则自动截断值

问题描述:

我正在研究从第三方合作伙伴读取XML并将数据放入数据库表中的脚本。我无法控制内容的长度或质量。我想避免添加逻辑来检查每个字段的长度。插入原则自动截断值

例如:我在varchar(255)类型的mysql数据库中有一列,XML导入的值大于255个字符。我想学说插入而不是抛出有消息Doctrine_Validator_Exception前255个字符“1个验证失败的标题(长度)”

使用学说1.2

我知道你说你“要避免添加逻辑检查每个字段的长度“,但您没有指定是出于性能原因还是因为有很多,而且您也不想单独编写代码。如果是后者,我会用的原则记录是这样的:

function set($fieldName, $value, $load = true) { 
    switch($fieldName) { 
    case 'id': 
    case 'foo': 
    case 'bar': 
    // list all of the fields that you DON'T want to truncate in this section 
    break; 
    default: 
    $value = substr($value, 0, 255); 
    } 
    parent::set($fieldName, $value, $load); 
} 

此功能覆盖上记录的默认设置()方法。它会将所有字段截断为与第一部分(id,foo,bar)中列出的字符不匹配的255个字符。

如果这不是你想要的,你可以让MySQL做截断,如果你写过列长度(1265 | Data truncated for column 'xxx' at row 1),它会发出一个警告,但是当查询完成时它会被Doctrine丢弃。为此,您可以将列类型从“字符串”更改为“blob”,并将第二个参数设置为null而不是列长度,然后在MySQL中设置适当的限制。