请教思路,对于字符型的字段,默认值设置成空串,即'',这种设计是个好习惯吗?
------------------
对于字符型字段,我认为设置默认值为空字符比较好.因为这样不会出现null这种情况,以后在程序中也不用单独去处理null了.
可是我不知这种习惯是不是有不好的方面.
比如 空串 ''是不是比 null 更占空间呀.查询时,会不会比 null 更慢些呀.另外:再请教一下,在哪种情况下最好不要设置默认值为空串,保留 null 这种取值的可能,能举个例子就更好了.
谢谢.

解决方案 »

  1.   

    我也这么认为字符串 '',数值 0,时间 getdate()
      

  2.   

    以上两位老师都是认为加默认值好,我也是这么认为的.
    但是我看了一下sqlserver2000自带的两个数据库,northwind,pubs,这两个库中的表中,字符型基本都不设默认值.也就有很少的int型设置了默认值为0,我认为自带的示例数据库应该是一个范本了,不设默认值应该有不设的原因吧.
    请大家继续讨论.
      

  3.   

    要给默认值.字符给 ''
    数字给不给0.这个看系统设计时0是否表示一种特定状态,如果不是,那么可以,如果是,那就不行,可以给一个不可能出现的数字,也可以给null,但不推荐null.
    日期,默认给1900-1-1,给getdate有问题, 如果给getdate那么,当业务数据写进去之后,连你都不能分辨这个时间是业务操作写的时间还是插记录时生成的时间,而1900-1-1这个很明显能看出来.
      

  4.   

    如果你想给的默认值,已在系统设置时被定义为一种状态了,那么就不能给它这个默认值.
    就以tinyint的0来说.
    某个订单表, status tinyint 当0时表示未处理.那么你的系统中很多地方依具这个值来对订单进行处理.
    你给0是没有问题的. 但业务流程变更后,可能,0之前还有其它状态,比如 在未处理前还有一个状态为 未验证,即未验证的订单不能被处理,  如果你更改系统设置值,用 110来表示未处理,那么你的系统要改动的地方很多, 简单的做法就是新加一个状态值比如112, 订单入库程序就写112为status. 这种情况下,我宁愿不给默认值. 程序上的不严谨引起的业务数据混乱,造成业务出错,损失很大.
      

  5.   

    上面几位老师好象都是赞成设默认值,可是为什么sqlserver2000自带的示例数据库中,字符型字段无一设置默认值呢?