bug是这样产生的,
我的数据库里的数据是采集来的,采集的时候直接写sql文入库
DB中某个字段(例:name)的长度是 50,
采集时没超过50格字(utf-8)所以入库成功
可是更新时
public function save($runValidation=true,$attributes=null)
{
if(!$runValidation || $this->validate($attributes))
return $this->getIsNewRecord() ? $this->insert($attributes) : $this->update($attributes);
else
return false;
}
由于生成的rules,array(‘name’, ‘length’, ‘max’=>50),
所以[color="#FF0000"]$this->validate($attributes)[/color]会失败
造成更新不成功
实际上name才是18个中文,由于是utf-8,一个顶仨,所以验证失败了
强哥这个’max’=>50 用的是strlen 而不是 mb_strlen
那只能自己在rules里,改成array(‘name’, ‘length’, ‘max’=>150),吗?
又看了一下,可以改成这样:
array(‘title’, ‘length’, ‘max’=>50[color="#FF0000"], ‘encoding’ => ‘utf8’[/color]),
强哥,这句’encoding’ => 'utf8’不能在gii生成时加上吗?
PS:其实也不算bug,只不过因为不知加’encoding’ => ‘utf8’,找了半天问题,因为我本来要更新的不是name,而是另一个统计数字的字段,所以找了半天错误。发出来和大家一起分享吧