背景:画面上用户不输入值,传入到数据库保存时有些为NULL,有些为''(空)
方案:对于必须输入项进行必填项Check,不是必须项如果用户未输入值,数据库中传入NULL而不是''(空)。
如果用户输入了空格,则往数据库中传入''(空).
如果对于一个字段未发生编辑往数据库中传入了''(空),则会引发后续一系列问题。
例如:默认以为判断该字段为空的条件为if(element = NULL),但是经过检索数据到前台并保存时,该字段未输入
值,但是由于输入框默认value=”“,会将""传入后台并存入数据库。导致我们在判断时出错。
并且,如果该字段定义为CHAR型,则传入后台中的空值会被存储为对应位数的空格。。当我们再次检索数据
并编辑时,输入框中会初始化从数据库中取出的空格,光标放入输入框时并不是处于最左边。。
总结:应在项目开始前就对数据为空如何进行存储进行统一,避免后期判断和读入的失误。另外,需要特别
注意调用语言本身提供的函数,经过验证后才可使用。例如:PHP提供的empty() 函数,""、0、"0"、NULL
、
FALSE
、array()、var $var;以及没有任何属性的对象都将被认为是空的,需要特别认识到,如果输入0时是被
判断为空的。在需求上确认是否输入0就是空,特别是对于金额等数字的处理。
背景:由于项目采用的是复式记账法,因此借方金额和贷方金额要保持一致。由于金额不可能全部为整数,
当为小数时需要进行向上取整。此时借方金额为正,贷方金额为负。需保持两个值在取整时绝对值相同。
方案:采用了sqlserver的函数ceiling(),但是该函数处理之后
ceiling(10.11) = 11
ceiling(-10.11) = -10
这时候两个值的绝对值并不想等。
改善案:先取两个值的绝对值,对其进行ceiling()运算,然后计算之后添加上相应的符号。
总结:对于类似金额的处理上,特别需要注意正负值处理后相等的情况。
对于各种数字类的输入,一定要进行位数的检查,避免因为位数溢出造成意想不到的结果。
还有对于NULL值的处理,这一点很重要。