mysql:如何在varchar和tinyint之间做选择?

现在有一个需求是给用户增加两个属性,这两个属性都是布尔值。然后我和同事之间就具体方案有了冲突:

我认为用两个字段,甚至一个字段做位运算就足够了。

而我同事却要用varchar,因为这两个属性都不会放到where条件里进行搜索,而且没有比tinyint省多少空间,还方便以后扩展(再有相应的字段直接扔里面就是了)

如果是你怎么选择?有没有更有说服力的理由呢?

阅读 6k
4 个回答

还是根据需要。
varchar 是可变长的字符串,需要使用一个或两个字节来记录字符串的长度。
当字符串长度过长时,由不同的引擎选择不同的处理方式,因此会对性能有一定的损失。
高性能 MySQL 一书中所说,在以下情况使用varchar 是合适的。
1.字符串列的最大长度比平均长度在很多。
2.列的更新很少,所以允许碎片的存在。
3.使用了像 UTF-8 之类的复杂字符集。

而tinyint,使用8位存储空间。

如果说以后需要扩展,那么我认为 varchar 可以还是好一点

表字段的设计应该是够用就好。

具体看你们这两个属性以后的可变化范围,如果说一定只有是和不是的关系,为什么要用varchar呢,如果说可变化性比较大的话,建议还是用varchat,不然后期迁移非常麻烦。


以后回答来自于 凯伦说
个人公众号 KailunTalk,写最好的技术文章,做最有态度的技术人。

mysql有bool类型,其实是tinyint(1)的别名,也有true和false的常量,值分别是1和0。或者可以用ENUM。除非有特殊的扩展需求,要不然用varchar就是闲的蛋疼。

个人认为,如果这两个属性值为布尔类型,使用一个字段位运算是最好的,扩展也很方便,比如你预期用户属性最多有5个,那就用tinyint,每一位都表示一个状态,现在只使用约定的2位,剩余6位为保留,在以后需要的时候启用即可

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进