【问题标题】:Is it better to define a "year" column to be of type Integer or String?将“年份”列定义为整数或字符串类型更好吗?
【发布时间】:2014-08-04 19:59:06
【问题描述】:

我确实意识到,如果必须对其进行数学计算,那么将列作为整数会更好。

我可能必须对“年份”列进行数学计算,但最少。那么存储为 String 还是 Integer 会更好吗?

谢谢。

【问题讨论】:

  • 它是一个整数。你为什么不想把它保存为一个?如有疑问:将其保存为实际类型。
  • @Nanne - 好建议。
  • @Nanne,其实是year,不是吗。
  • @Nanne 但人们并没有真正将年视为整数,这有点像考虑电话号码。我认为电话号码是字符串。据我所知,整数是“价格”或“金额”等。还是我错了?谢谢。
  • 始终以最严格的类型存储您的数据。

标签: mysql database database-design


【解决方案1】:

将其保存为整数。

虽然您可能会在某些应用程序中如此频繁地读取和提供这些数据,以至于 int->string 转换是一个问题……但这将是一个极端情况。

另一边

  • 在数据存储中,整数比字符串提供的选项更小(例如 TINYINT)
  • 您可以避免数学转换
  • 当所有追随您的开发人员查询自然是数字的数据类型并获取字符串时,这会让他们感到困惑/惹恼/沮丧。

【讨论】:

    【解决方案2】:

    如果您不希望您的 YEAR 变量包含非数字值,那么是的,您应该将其存储为数字。

    我不会将其存储为INT,因为我怀疑年份会达到INT 必须提供的限制。我会将其保存为SMALLINT 甚至TINYINT 都应该是unsigned

    SMALLINT UNSIGNED 为您提供65535 的最大值,除非您存储的年份超过65535 年份,这应该足够了。

    【讨论】:

      【解决方案3】:

      你可以发疯了,把它保存为YEAR

      这会将您限制为 1901-2155。

      如果这太严格了,我更喜欢CHAR(4) 而不是INT; MySQL DATETIME 比较以类似字符串的方式完成..

      你可以做类似的事情

      WHERE year < CURDATE()
      

      那就不用担心了。

      【讨论】:

      • YEAR 数据类型是为表示“年”值而定制的。一个问题是如何在客户端库(例如 Perl DBI、MySQL JDBC 连接器等)中处理/表示/转换 YEAR 数据类型。澄清一下,MySQL 确实将 DATETIME 存储为字符串内部。 DATETIME 占用 8 个字节的存储空间,尽管这可能在最近的版本 (>5.5) 中有所更改。
      • @spencer7593 我想它会在查询时作为字符串输出,就像 datetime 所做的一样,并且早在文档中就已经存在;我相当确定客户端库会处理它。但是,您对 DATETIME 存储是完全正确的。我已经更新了答案。
      • CHAR(4) 允许像19 3 这样的值。恕我直言,这不是对其中一种整数数据类型的改进。
      猜你喜欢
      • 2015-08-02
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 2020-10-03
      • 2013-11-27
      • 2015-04-24
      • 2020-11-10
      • 2012-05-07
      相关资源
      最近更新 更多