|      1MeteorCat      2018-05-04 13:20:43 +08:00 默认 null 占据一个数据一个字节,每条数据多分配一个字节的空间来表示字段是否为空,无论你是否使用到 null | 
|      2MeteorCat      2018-05-04 13:27:33 +08:00 Postgres 没接触过,mysql 和 mariadb 就是这样,不排除其他数据库软件有所优化 | 
|  |      4sagaxu      2018-05-04 13:35:45 +08:00 via Android 比如说温度,你用什么值表示这项数据无效?不用 null 再加个字段吗? | 
|      6MeteorCat      2018-05-04 13:38:11 +08:00 @SimbaPeng  如果需要不留空,比如 create_datetime 这种创建就需要生成的,就直接当时的时间默认值 如果需要留空,那么比如 update_datetime 这种实时更新,但是前期不留空的,直接给他一个会被识别为 null 字符串 `"0000-00-00 00:00:00"`;如果取出来的话,需要判断是不是该格式,我一般都是时间戳保存转换 | 
|  |      8niubee1      2018-05-04 13:39:27 +08:00 比如你定义一个字段是 boolean 类型, 但是如果不是 not null 的话, 而你又忘记给这个字段赋值, 那么, 这个字段就会有  null, false, true 三个状态 | 
|      10MeteorCat      2018-05-04 13:40:49 +08:00 @shansing 不行,现实上测试过,0 在温度面前也是个特殊值,因为有的地方温度也是存在 0 度,不能将具体存在的温度纳入错误之中 | 
|      11PressOne      2018-05-04 13:41:45 +08:00 via Android 新版 MySQL 早就没有这个必要了,按需设置,没有数据就 Null,不用强求,不影响索引效率。 | 
|      15alvinbone88      2018-05-04 14:54:44 +08:00  4 MySQL 里字段尽量不要为空主要是为了排序的考虑,而不是索引的考虑 在 MySQL 里,null 值永远是最小的,而且 null 与其他任何值比较的结果都是 false 这就导致用 ASC 排序时 null 值永远在最前面 | 
|      16lihongjie0209      2018-05-04 15:07:13 +08:00 @MeteorCat #10 -99999 考虑一下, 之前看到有人用 unix time 的开始时间作为时间的默认值或者是异常值 | 
|      17jjx      2018-05-04 16:44:06 +08:00 最好取默认值, 否则实际操作中很麻烦 比方说 pg, 要取空白的记录需要 select * from sale_orders where source is null or source=''; | 
|      18MeteorCat      2018-05-04 17:30:25 +08:00 @lihongjie0209 这种代码层面的验证移交给数据库本身就是极其错误的,数据库不对数据准确性负责,只负责你有数据 insert 没有错误就行了 | 
|      19MeteorCat      2018-05-04 17:45:54 +08:00 @lihongjie0209 对了,这种还涉及数据库字段的正确配置,比如你 datetime|tinyint 强制硬塞给一个"123456789"|9999----->"0000-00-00 00:00:00"|255,这种我感觉有点离题但是却是个值得思考的问题,因为一方面制定数据库得考虑这些,一方面还要在 DAO 层做这样的判断 | 
|      21eslizn      2018-05-04 18:47:04 +08:00 看场景来的,楼上各种说默认值的,可能没遇到某个字段唯一,但是是可选的情况 | 
|  |      22glues      2018-05-04 18:55:17 +08:00 via iPhone 能加默认值的就尽量 not null,不能加的就不强求 | 
|  |      24AltairT      2018-05-04 20:18:47 +08:00 @MeteorCat 这个应该是类似单片机里那个思路,就是把-500~2000 映射到 0~25000 (包括一位小数),就是需要转换一下罢了。不知其他胖友有更好思路吗? | 
|      25MeteorCat      2018-05-04 20:19:44 +08:00 via Android  1 @shansing 哈哈哈,不过确实冬季有零度产生的,这个其实是想说 PHP 这种语言很多人都会直接拿 null 和 0 等同 if(null==0),导致有时候到底是哪个字段本身是 null 还是本身温度就是 0,这种假设是存在的 | 
|      26MeteorCat      2018-05-04 20:23:19 +08:00 via Android @AltairT 这种-和+的数组情况我们都是有判断极限值的,这种我记得以前 c 的 strlen 以前也有缓冲区溢出攻击,所以基本上都是有做极限值判断 | 
|      27lolizeppelin      2018-05-04 20:48:21 +08:00 via Android | 
|      28MeteorCat      2018-05-05 01:08:26 +08:00 @lolizeppelin = =我以爲是普通零度 |