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