2010-06-09 68 views

回答

32

不,这几乎总是一个坏主意。

  • 将使用更多的空间
  • 索引将不会执行,以及
  • 你不能做算术
  • 数据不是自我证实的,因为类型
  • 自动模式发电机会给你的字符串类型而不是数字
  • 总计像SUM将不再工作
  • 输出可能会错误地排序
  • 你需要转换到使用它作为一个数字,导致性能命中
0

您将无法使用声明为varchar的列进行计算,因此应使用数字类型。既然你的SQL查询是一个字符串,MySQL会为你做所有的转换(当然,这并不意味着你不需要验证用户提供的值)。

1

我觉得是OK键存储号码为varchar,只要你不想做Calcs(计算)与它。

例如,电话号码或邮政编码将更好地存储在varchar字段中,因为您可以格式化它们。

+0

我会将诸如电话号码之类的东西存储起来,并且只将电话号码等内容存储为varchar,因为它们并不是真正的数字。你不会在电话号码上做数学。但是,当决定数据类型的字段时,应始终默认使用通过varchar的数字类型,除非您可以认为不是一个好的理由,因为从varchar到numeric的方法比其他方法困难得多。 – GordonM 2011-03-04 12:57:43

3

您可以将前导零存储到varchar中,但不能使用整数列(例如,1230000123之间可能有差异)。例如一些国家的邮政编码。但是,如果您需要这样做,那么您实际上正在处理应具有varchar列的文本信息。例如,电话号码或邮政编码一定要转到varchar列。否则,如果你使用数据像数字(将它们加在一起,比较它们等),那么你应该把它放到整数列中。它们占用的空间少得多,使用起来更快。

+0

领先的零问题也可能是一个缺点。最近我遇到了一个项目的情况,由于Java代码如何处理它,一个表的前导零为零,另一个表没有。这使得在本专栏中加入更加困难。数据是一个数字,所以应该可能被存储为这样的数据而不是varchar。 – xdhmoore 2013-03-11 15:50:44