2013-04-21 58 views
2

我想決定是否使用SMALLINT(4)與DATETIME來表示MYSQL中的一年。我應該在MySQL中使用SMALLINT而不是DATETIME來節省空間嗎?

我的表格需要有型號年份,但我不想浪費空間與月份或日期是這樣的:20xx-01-01 00:00:00

所以,我可以節省空間表示這樣的一年:

year SMALLINT(4); 

如果它不是一個很大的節省,我很好使用DATETIME。如果使用4位數字的年份有利於節省空間,那麼我如何在的四位數年份作爲DATETIME?

回答

6

有一年的數據類型在MySQL - http://dev.mysql.com/doc/refman/5.1/en/year.html

YEAR類型是用來表示年份值1個字節的類型。可以將其聲明爲YEAR(4)或YEAR(2)來指定四個或兩個字符的顯示寬度。如果沒有給出寬度,默認值是四個字符。

注:

年(2)數據類型,你應該選擇使用前,應考慮某些問題。從MySQL 5.1.65開始,YEAR(2)已被棄用。

可能範圍:1901至2155年,或0000

1

你會使用mktime(date(Y), 0, 0, 0, 0, 0)

1

可以使用DATE數據類型(使用3個字節),而不是DATETIME(8個字節)。您仍然需要存儲月份和日期,但您不需要存儲時間。

+0

功能getLocalDate($日期格式,$的timeZone) { \t $時區=新DateTimeZone($的timeZone); \t $ date = new DateTime(); \t $ date-> setTimezone($ timezone); \t return $ date-> format($ dateFormat); } – lil 2013-04-21 04:35:54

+0

謝謝,但我不需要當年,就是產品生產的那一年。我仍然試圖找出所有這些的含義。我剛開始使用PHP。 – 2013-04-21 04:42:23

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')"); 
+0

這很有道理。謝謝。 – 2013-04-21 04:51:09

+0

@Eric,請不要*完全重寫*這樣的答案。清理措辭和語法是一回事,把話語放在別人口中完全是另一回事。考慮添加自己的答案。 – Charles 2013-06-11 17:07:08

相關問題