我在mysql表中存储了带有国家/地区代码的手机/手机号码。因为我已经为这两个字段使用了十进制数据类型(例如,对于dialcode decimal(5,0),mobileno decimal(20,0))。我的mobileno和拨号代码或国家/地区代码必须是数字的。现在我要使用varchar(5)为dial-code和varchar(20)为mobileno更改它。
性能可以吗?谁能告诉我mobileno(任何国家)的最大长度应该是多少?如果任何其他数据类型如flote或integer对于上述情况更可取?如果是的话,为什么呢?
感谢。
答案 0 :(得分:1)
这个问题冒着征求意见的风险。但是,我认为它有一个"对"或者至少"更好"答案。
存储数字时应使用数字类型。数字具有被排序的属性并且能够对它们进行算术运算。许多东西都存储为没有这些属性的数字 - 考虑信用卡号,邮政编码和FIP代码。电话号码也属于这一类。
一个重要的考虑因素是领先0是否重要。对于实际数字,这些并不重要。对于碰巧使用数字的代码,它们很重要。
因此,我建议您将值存储为字符串。我不知道最长的电话号码是什么,但我不希望我的数据库依赖于今天的最大值。只需使用像varchar(255)
这样的东西,它应该足够长时间了。