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

MySQL 中的手机号码字段用什么类型好? char? int?

  •  
  •   iugo · 2014-10-21 16:13:25 +08:00 · 52414 次点击
    这是一个创建于 3476 天前的主题,其中的信息可能已经有所发展或是发生改变。
    需要根据手机号码查询订单, 看到别人在用 char(11) 来存储手机号码.

    字符串的效率不是应该比数字差吗? 为什么不用 int 来储存?

    不过手机号码的数字就像姓名一样含义应该是字符串的, 只不过长成个数字的外貌.

    对于手机号这种数据来说, 是否 char 是最好的选择?
    15 条回复    2014-10-21 21:08:30 +08:00
    wy315700
        1
    wy315700  
       2014-10-21 16:23:26 +08:00   ❤️ 1
    你存INT以后 还怎么按照开头或者尾号查询
    learnshare
        2
    learnshare  
       2014-10-21 16:25:33 +08:00
    它就是个字符串,不是数字啊
    HunterPan
        3
    HunterPan  
       2014-10-21 16:26:03 +08:00
    必须字符串
    staticor
        4
    staticor  
       2014-10-21 16:58:58 +08:00
    字符串吧 前x位可作区域码 虽然可能用不到
    holyghost
        5
    holyghost  
       2014-10-21 17:03:29 +08:00
    因为int存不下11位呀
    caixiexin
        6
    caixiexin  
       2014-10-21 17:15:49 +08:00
    用int的话,万一对这串手机号有特殊操作咋办?比如正则匹配,取号头啥的
    iugo
        7
    iugo  
    OP
       2014-10-21 17:46:10 +08:00
    @wy315700
    @learnshare 谢谢.
    @HunterPan 谢谢.
    @staticor 谢谢,
    @holyghost
    @caixiexin

    谢谢, 手机号码的本质是字符串, 虽然是纯数字组成的.
    还能实现将来可能的区位查询.
    是的, INT 无法存下手机号, 还要 BIGINT 才行.

    结论: 看来 char 储存手机号是一种符合逻辑, 常用的方法.
    iugo
        8
    iugo  
    OP
       2014-10-21 17:47:29 +08:00
    @wy315700 谢谢.
    @holyghost 谢谢.
    @caixiexin 谢谢.
    不好意思, 本来上帖要修改为一并感谢的, 没写好.
    jasontse
        9
    jasontse  
       2014-10-21 17:55:12 +08:00 via iPad
    都存一遍,爱怎么查效率都高。
    zhujinliang
        10
    zhujinliang  
       2014-10-21 18:10:17 +08:00 via iPhone   ❤️ 1
    话说身份证号为什么会有个x,就是怕程序员存成整数型
    learnshare
        11
    learnshare  
       2014-10-21 18:13:02 +08:00
    @zhujinliang 整数型也太长了...
    caixiexin
        12
    caixiexin  
       2014-10-21 18:41:05 +08:00
    另外,如果确定是11位的可以用char,要是长度,格式不确定,比如带+86格式的手机号什么的,用varchar,长度设长一点,拓展性更好。
    gDD
        13
    gDD  
       2014-10-21 18:48:13 +08:00 via iPhone
    @zhujinliang 看不出来时开玩笑,最后一位是校验位,用X是逼不得已的…
    wy315700
        14
    wy315700  
       2014-10-21 19:42:53 +08:00
    @zhujinliang

    1。那个是罗马字母X,也就是10,不是因为字母x
    2。为什么会出现X,是因为这一位是前面17位运算以后除以11得出来的校验值。
    oott123
        15
    oott123  
       2014-10-21 21:08:30 +08:00 via Android
    @gDD 也不算迫不得已吧,毕竟对9取余就行了…
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1096 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 23:13 · PVG 07:13 · LAX 16:13 · JFK 19:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.