我正在尝试决定是否使用 SMALLINT(4) 与 DATETIME 来表示 MYSQL 中的一年。
我的表需要有型号年份,但我不想像这样浪费月份或日期的空间:20xx-01-01 00:00:00
.
所以我可以像这样节省代表一年的空间:
year SMALLINT(4);
如果节省不多,我可以使用 DATETIME。如果使用 4 位数年份有利于节省空间,那么如何$_POST
使用四位数年份作为 DATETIME?
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
您可以使用 DATE 数据类型(使用 3 个字节)而不是 DATETIME(8 个字节)。您仍然需要存储月份和日期,但不需要存储时间。
你会用mktime(date(Y), 0, 0, 0, 0, 0)
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')");