【发布时间】:2010-10-11 07:10:43
【问题描述】:
我将在 MySQL 表中存储一年:将其存储为 smallint 还是 varchar 更好?我认为由于它不是一个完整的日期,日期格式不应该是一个答案,但我也会包括在内。
小?变量(4)?日期?还有什么?
例子:
2008
1992
2053
【问题讨论】:
标签: mysql database database-design optimization
我将在 MySQL 表中存储一年:将其存储为 smallint 还是 varchar 更好?我认为由于它不是一个完整的日期,日期格式不应该是一个答案,但我也会包括在内。
小?变量(4)?日期?还有什么?
例子:
2008
1992
2053
【问题讨论】:
标签: mysql database database-design optimization
我自己的经验是使用 Oracle,它没有 YEAR 数据类型,但我一直试图避免仅仅因为元素仅由数字组成而对元素使用数字数据类型。 (因此这包括电话号码、社会安全号码、邮政编码,作为其他示例)。
我自己的经验法则是考虑数据的用途。如果您要对其执行数学运算,则将其存储为数字。如果您将执行字符串函数(例如“获取 SSN 的最后四个字符”或“将电话号码显示为 (XXX) XXX-XXXX”),那么它就是一个字符串。
另一个线索是要求将前导零存储为数字的一部分。
此外,尽管它们通常被称为电话“号码”,但它们经常包含字母来指示分机号码作为后缀的存在。同样,标准书号可能以“X”结尾作为“校验位”,而国际标准序列号可以以“X”结尾(尽管 ISSN 国际中心反复将其称为 8 位代码@ 987654321@).
在国际环境中电话号码的格式设置很棘手,当然,符合 E.164 要求国家/地区呼叫代码以“+”为前缀。
【讨论】:
我会使用 YEAR(4) 列类型...但前提是预期年份在 1901 和 2155 范围内...否则,请参阅 Gambrinus 的回答。
【讨论】:
我会选择 small-int - 据我所知 - varchar 会占用更多空间和日期。第二个选项是日期。
【讨论】: