插入原则自动截断值
问题描述:
我正在研究从第三方合作伙伴读取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中设置适当的限制。