CDbColumnSchema::typecast()
这个方法是否可以考虑当数据库字段不允许为null时,这里就不要返回null?
举一个情况,添加新闻时,分类不选,是空值 ‘’ 传递到attribute中,因为分类Id为Int类型,经过 typecase() 过滤后,返回了null, 最终导致生成的sql执行抛错,抛错如下:
CDbCommand 无法执行 SQL 语句: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'category_id' cannot be null
假如属性值是 null、’’ 空字符串,的话
————如果字段类型是字符串,则返回 ‘’ 空字符串,如果是Int或浮点的,就返回 0
你感觉呢?
qiang
(Qiang Xue)
4
我不是太确定。如果列定义了缺省值,那么null是更好的选择。
我定义了默认值,可是为什么还是跑那错误? 这个可得测试一下~~
测试结果:
字段设置了 not null default 0
sql为:INSERT INTO rl_banner
(category_id
, title
) VALUES (NULL, ‘ttt’)
会抛错错误:#1048 - Column ‘category_id’ cannot be null
但在更新时,是不会抛错的。更新的sql也是将自动设置为null,但就会自动变成了 0,这又是怎么样的考虑?
总结:默认值,是当插入sql没有指定字段时生效。即使是指定为null,也不会触发默认值。
以上测试,是基于 MySQL 5
请qiang做一个评论~~