我将在MySQL表中存储一年:将它存储为smallint或varchar更好吗?我认为,因为它不是一个完整的日期,日期格式不应该是一个答案,但我也会包含它。
SMALLINT? VARCHAR(4)?日期?别的什么?
示例:
2008
1992
2053
答案 0 :(得分:27)
我会使用YEAR(4)列类型......但只有在预期年份在1901和2155范围内时...否则,请参阅Gambrinus的回答。
答案 1 :(得分:13)
我会选择small-int - 据我所知 - varchar会占用更多空间和日期。第二种选择是日期。
答案 2 :(得分:6)
我自己的经验是Oracle,它没有YEAR数据类型,但我一直试图避免为元素使用数字数据类型,因为它们只包含数字。 (因此,这包括电话号码,社会安全号码,邮政编码以及附加示例)。
我自己的经验法则是考虑数据的用途。如果您将对其执行数学运算,则将其存储为数字。如果您将执行字符串功能(例如“取SSN的最后四个字符”或“将电话号码显示为(XXX)XXX-XXXX”),那么它就是一个字符串。
另一条线索是将前导零作为数字的一部分存储的要求。
此外,尽管通常被称为电话“号码”,但它们通常包含字母以指示存在分机号码作为后缀。类似地,标准书号可能以“X”作为“校验位”结束,国际标准序列号可以以“X”结尾(尽管ISSN国际中心反复将其称为8位代码{ {3}})。
在国际环境中格式化电话号码是棘手的,当然,并且符合E.164要求国家/地区呼叫代码以“+”为前缀。