我应该在MySQL中使用SMALLINT而不是DATETIME来节省空间吗?

时间:2013-04-21 04:10:36

标签: mysql datetime size

我正在尝试决定是否使用SMALLINT(4)和DATETIME来表示MYSQL中的一年。

我的桌子需要有型号年份,但我不想浪费像这样的月份或日期:20xx-01-01 00:00:00

所以我可以节省代表一年的空间:

year SMALLINT(4);

如果不是很大的节省,我可以使用DATETIME。如果使用4位数年份有利于节省空间,那么我如何$_POST作为DATETIME的四位数年份?

4 个答案:

答案 0 :(得分:6)

MySQL中有年份数据类型 - http://dev.mysql.com/doc/refman/5.1/en/year.html

  

YEAR类型是1字节类型,用于表示年份值。它可以声明为YEAR(4)或YEAR(2)以指定四个或两个字符的显示宽度。如果没有给出宽度,则默认为四个字符。

注:

  

YEAR(2)数据类型在选择使用之前应考虑某些问题。从MySQL 5.1.65开始,YEAR(2)已被弃用。

可能的范围:1901至2155,或0000

答案 1 :(得分:1)

您使用mktime(date(Y), 0, 0, 0, 0, 0)

答案 2 :(得分:1)

您可以使用DATE数据类型(使用3个字节)而不是DATETIME(8个字节)。您仍然需要存储月和日,但您不需要存储时间。

答案 3 :(得分:1)

MySQL DATE类型分配3个字节,而SMALLINT是2字节整数。所以,如果有的话,它会有很多积极的节省。另一方面,每当您想要将整数年份列与其他日期列进行比较时,您需要做额外的工作。

要将整数输入值转换为MySQL日期,您可以使用以下内容:

$year = isset($_POST['year']) ? intval($_POST['year']) : 1970;
// ISO 8601 standard date representation is YYYY-MM-DD
mysqli_query($link, "INSERT INTO `mytable`(`datefield`) VALUES('{$year}-01-01')");