数据库表某字段设置default为Null好,还是“”好,或者是Empty String好呢?手机端我只想返回空

数据库某字段设置为Null时,手机端默认就会返回Null,如果我想让手机端返回空,还得做个判断。
1、要是我想让手机端返回时为空的话,不做判断,表字段default应该怎么设置呢?
2、表字段设置default 为Null好,还是“”好,或者是Empty String好呢?它们各有区别?

回复
阅读 7.4k
4 个回答

1:空值('')是不占用空间的
2: MySQL中的NULL其实是占用空间的。官方文档说明:
“NULL columns require additional space in the row to record whether their values are NULL. For MyISAM tables, each NULL column takes one bit extra, rounded up to the nearest byte.”
所以 mysql设计表时 建议不要用default NULL
string类型的可以default '' int类型的可以default 0
楼主想判断字段是否为空 用php处理即可

《高性能mysql》中是这么说的:

尽量避免NULL

通常情况下最好指定列为 NOT NULL,除非真的需要存储 NULL 值;mysql表定义时如果没有指定列为NOT NULL,默认都是允许NULL的;

如果查询中包含可为NULL的列,对mysql来说更难优化。因为可为NULL的列,使得索引、索引统计、值比较,都更复杂;

可为NULL的列会使用更多的存储空间,在MYSQL里也需要特殊处理。

当可为NULL的列被索引时,每个索引记录需要一个额外的字节,在MyISAM里甚至还可能导致固定大小的索引(例如只有一个整数列的索引)变成可变大小的索引;

通常,把可为NULL的列改为NOT NULL带来的性能提升比较小,所以调优时没有必要首先修改这种情况,除非确定这会导致问题;

但是如果计划在列上建索引,就应该尽量避免设计成可为NULL的列。当然也有例外,比如InnoDB使用单独的bit存储NULL的值,对稀疏数据有很好的空间效率。这一点不适用于MyISAM。
(稀疏数据:是指很多值都是NULL,少数值是非NULL)

SQL: Using NULL values vs. default values
Is it good to use default: NULL?
No default value Vs NULL Vs 0 in MySQL as a default value for text and integer fields

先奉上3个stackoverflow上关于该问题的讨论吧,其实我个人感觉是使用默认值还是NULL这并没有什么太大的差别,哪种都可以,并没有什么特别的优势与劣势。

与手机端的接口返回问题,这个一般情况都是通过restful接口来交换数据的,其它语言我不是很清楚,但是在Java中实现返回值过滤或者默认值转换是非常easy的。参考setPropertyInclusion

个人认为主要看你对于空的定位,定位为异常错误的不应该出现的情况建议设置为null,如果定位为正常可能出现的情况则这是为''比较好。

推荐问题
宣传栏