数据库性别这个字段应该用什么值来记录最合理

一直以来,都是用1和2来记录,男或女。
最近发现一种记录方式,就是用M和F,来代替男和女。

这样记录,明显比1和2,更加直观。


但是,如果从数据库角度来看,int类型的1和2,是否比char类型的M和F,性能更加高,在用索引的情况下?


另外,听说facebook的性别字段,提供了20多个选择,如果是用M和F,这种单个英文来记录,估计也不合适。

大佬们有什么见解?

阅读 657
评论 2019-10-09 提问
    6 个回答
    零玖
    • 7.7k

    不建议使用数据库 枚举 。既然题目没有标榜是什么数据库,那就以 MySQL 来说 Enum 是一个非常奇葩的存在, 关于 MySQL 枚举坑移步下方[1]。

    其次,也不应该使用 int ,在数据库设计原则中,应当以节约为主,除开 int 还有 tinyint 可选。无符号的 tinyint ,存储范围为 0~255 ,总共 256 个数字已经应对绝大部分 类枚举 场景。

    至于 Char 还是 tinyint 就是你自己的选择了,当然我更善于在业务中使用 tinyint 。

    评论 赞赏 2019-10-10

      tinyint
      用数字,字符串会有字符集校对过程,肯定比数字要慢
      另外也不建议用enum,如果你需要加一个值,比如未知(也就是没选性别),那你改数据库结构会导致锁表

      评论 赞赏 2019-10-10

        其实不要太纠结这个,做好枚举就好了,扩展会更好

        评论 赞赏 2019-10-10
          半仙
          • 697

          性别这个,没有必要纠结用数字还是字母,意义不大。你用M F,只是见名知意,用数字,更节省空间而已。
          另外,对这种字段来说,建索引是没有意义的,尤其是列值单一情况。

          评论 赞赏 2019-10-10
            jokester
            • 6.6k

            性别的发展速度远快过数据库的
            所以还是int算了

            评论 赞赏 2019-10-10

              我的做法是数据库用int标注性别,然后在后端获取数据时利用自定义映射类将数字映射成具体的性别

              评论 赞赏 2019-10-10
                撰写回答

                登录后参与交流、获取后续更新提醒