2

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

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

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

year SMALLINT(4);

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

4

4 回答 4

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

于 2013-04-21T04:20:11.730 回答
1

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

于 2013-04-21T04:26:40.063 回答
1

你会用mktime(date(Y), 0, 0, 0, 0, 0)

于 2013-04-21T04:18:39.093 回答
1

MySQL DATE 类型分配 3 个字节,而 SMALLINT 是 2 字节整数。所以,如果有的话,这是急切的储蓄。另一方面,每次您想将 year-as-integer 列与其他 date 列进行比较时,都需要做一些额外的工作。

要将整数输入值转换为 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')");
于 2013-04-21T04:43:04.713 回答