V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
444683462
V2EX  ›  问与答

有没高手总结下 mysql 字段设置的经验

  •  1
     
  •   444683462 · 2014-10-21 17:20:44 +08:00 · 1899 次点击
    这是一个创建于 3513 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如
    @手机号码 varchar
    @网络IP字段,除特殊情况一律用bigint来记录inet_aton值;
    @时间相关字段:用int型时间戳;放弃使用datatime这样的时间类型
    @能用int的,坚决不用bigint
    @用DECIMAL代替FLOAT和DOUBLE存储精确浮点数
    @ 使用TINYINT来代替ENUM类型

    这种类似的经验之谈 还有没 或者哪里有文章总结一下
    Sunyanzi
        1
    Sunyanzi  
       2014-10-22 08:40:21 +08:00
    十五个小时了还是没人理 ... 你自己也该知道你这个问题问得有多没水准了 ...

    字段的使用没有什么经验之谈 ... 这只是针对场景的个人习惯罢了 ...

    没人说手机号码不能用 UNSIGNED BIG INT 存 ... 就像没人说 IP 不能用 CHAR(16) 一样 ...

    手机号用数值型存的好处是省空间 ... 坏处是无法存加号及括号 ... 以及批量查询会慢些 ...

    IP 用数值形存的好处依然是省空间 ... 坏处是存取和判断范围的时候都需要额外的运算 ...

    至于时间相关字段 ... 也没人说必须以时间戳的形式存 UNSIGNED INT ...

    MySQL 自己提供了许多很好用的时间操作函数 ... 为了存进整形字段而抛弃这些函数是愚蠢的 ...

    说来当我看到你写出「能用 INT 就不用 BIGINT」这种说法的时候我就不准备继续回答了 ...

    这就像说能用 VARCHAR 就不用 TEXT 一样 ... 何况你置 TINYINT 和 SMALLINT 于何处 ..?

    这么说你是不是还应该推出能用 SMALLINT 不用 INT 能用 TINYINT 不用 SMALLINT ..?

    先这样吧 ... 总而言之一句话 ... MySQL 的每种数据类型都有其存在的意义 ...

    先弄清楚每种数据类型为什么存在以及你需要存储的数据会参与怎样的运算再来问吧 ...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2352 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 15:57 · PVG 23:57 · LAX 08:57 · JFK 11:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.