mysql資料庫的日期欄位類型建議為varchar或者char,存入時間戳。
取出的時候,將時間戳轉換為你需要的時間格式就好。
例:
假設取出值為$time
echo
date('y-m-d
h:i:s',$time);
你就會看到:2011-11-23
17:42:43的時間格式
❷ mysql資料庫里的日期用timestamp還是datetime好
mysql資料庫里的日期用timestamp還是datetime好 (1)4個位元組儲存
(2)值以UTC格式保存
(3)時區轉化 ,存儲時對當前的時區進行轉換,檢索時再轉換回當前的時區。
(4)TIMESTAMP值不能早於1970或晚於2037!
timestamp在資料庫里實際記載的時間是國際標准時間,同一個timestamp值在不同的時區檢索出來的日期時間是不一樣的,因為系統會根據時區的不同進行自動時區轉換,而datetime則不會進行轉換時區轉換,存儲時是什麼日期時間,檢索出來的就是存入時的日期時間,它不會有變化。至於這兩種日期時間類型哪種好是沒有定論的,要根據實際情況和應用需求做出取捨。
請注意由於無需實施時區轉換,系統處理dateime所產生的系統開銷要比timestamp小。
沒什麼好不好的,方便省事才是王道。都用datetime 你說呢,誰在乎那點存儲
類型
類型 存儲需求 格式 時間范圍
datetime 8個位元組 yyyy-mm-dd hh-mm-ss 1000-01-01 00:00:00 到9999-12-31 23:59:59 timestamp 4個位元組 yyyy-mm-dd hh-mm-ss 1970-01-01 00:00:00 到2037-12-31 23:59:59
timestamp類型會有時區變數的影響,跨時區使用時應注意
datetime 8個位元組 yyyy-mm-dd hh-mm-ss 1000-01-01 00:00:00 到9999-12-31 23:59:59
timestamp 4個位元組 yyyy-mm-dd hh-mm-ss 1970-01-01 00:00:00 到2037-12-31 23:59:59
timestamp類型會有時區變數的影響,跨時區使用時應注意
沒什麼好不好的,方便省事才是王道。都用datetime 你說呢,誰在乎那點存儲 類型 類型 存儲需求 格式 時間范圍 datetime 8個位元組
Mysql中經常用來存儲日期的數據類型有2種:Date、Datetime.
1.Date數據類型:用來存儲沒有時間的日期。Mysql獲取和顯示這個類型的格式為「YYYY-MM-DD」。支持的時間范圍為「1000-00-00」到「9999-12-31」。
2.Datetime類型:存儲既有日期又有時間的數據。存儲和顯示的格式為 「YYYY-MM-DD HH:MM:SS」。支持的時間范圍是「1000-00-00 00:00:00」到「9999-12-31 23:59:59」。
TIMESTAMP列用於INSERT或UPDATE操作時記錄日期和時間。如果你不分配一個值,表中的第一個TIMESTAMP列自動設置為最近操作的日期和時間。也可以通過分配一個NULL值,將TIMESTAMP列設置為當前的日期和時間。
TIMESTAMP值返回後顯示為'YYYY-MM-DDHH:MM:SS'格式的字元串,顯示寬度固定為19個字元。如果想要獲得數字值,應在TIMESTAMP列添加+0。
注釋:MySQL4.1以前使用的TIMESTAMP格式在MySQL5.1中不支持;關於舊格式的信息參見MySQL4.1參考手冊。
datetime
1. 佔用8個位元組
2. 允許為空值,可以自定義值,系統不會自動修改其值。
3. 實際格式儲存(Just stores what you have stored and retrieves the same thing which you have stored.)
4. 與時區無關(It has nothing to deal with the TIMEZONE and Conversion.)
5. 不可以設定默認值,所以在不允許為空值的情況下,必須手動指定datetime欄位的值才可以成功插入數據。
6. 可以在指定datetime欄位的值的時候使用now()變數來自動插入系統的當前時間。
結論:datetime類型適合用來記錄數據的原始的創建時間,因為無論你怎麼更改記錄中其他欄位的值,datetime欄位的值都不會改變,除非你手動更改它。
timestamp
1. 佔用4個位元組
2. 允許為空值,但是不可以自定義值,所以為空值時沒有任何意義。
3. TIMESTAMP值不能早於1970或晚於2037。這說明一個日期,例如'1968-01-01',雖然對於DATETIME或DATE值是有效的,但對於TIMESTAMP值卻無效,如果分配給這樣一個對象將被轉換為0。
4.值以UTC格式保存( it stores the number of milliseconds)
5.時區轉化 ,存儲時對當前的時區進行轉換,檢索時再轉換回當前的時區。
6. 默認值為CURRENT_TIMESTAMP(),其實也就是當前的系統時間。
7. 資料庫會自動修改其值,所以在插入記錄時不需要指定timestamp欄位的名稱和timestamp欄位的值,你只需要在設計表的時候添加一個timestamp欄位即可,插入後該欄位的值會自動變為當前系統時間。
8. 以後任何時間修改表中的記錄時,對應記錄的timestamp值會自動被更新為當前的系統時間。
結論:timestamp類型適合用來記錄數據的最後修改時間,因為只要你更改了記錄中其他欄位的值,timestamp欄位的值都會被自動更新。
看完這個比較你就知道用哪個好啦
我們公司一般用datatime,可控性比較強
jdbc查詢Mysql資料庫的日期問題
你沒說錯!
查出來可以保存為String類型 具體轉化一下就OK了
BBSXP 用的MYSQL資料庫還是MSSQL資料庫
BBSXP同時支持Aess資料庫和MSSQL資料庫
在Config.asp文件里定義:
IsSqlDataBase=1 '定義資料庫類別,0為Aess資料庫,1為SQL資料庫
不知道你是哪個版本,在BBSxp 2008 SP2里Config.asp文件在根目錄下。內容如下:
<%
InstallIPAddress="127.0.0.1" '安裝BBSXP的IP地址,針對install.asp的訪問許可權
TablePrefix="BBSXP_" '資料庫表的前輟名(一般不用更改)
IsSqlDataBase=0 '定義資料庫類別,0為Aess資料庫,1為SQL資料庫
If IsSqlDataBase=0 Then
'''''''''''''''''''''''''''''' Aess資料庫設置 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''
SqlDataBase = "database/bbsxp2008.mdb" '資料庫路徑
SqlProvider = "Microsoft.Jet.OLEDB.4.0" '驅動程序[ Microsoft.Jet.OLEDB.4.0 Microsoft.ACE.OLEDB.12.0 ]
SqlPassword = "" 'ACCESS資料庫密碼
Connstr="Provider="&SqlProvider&";Jet Oledb:Database Password="&SqlPassword&"; Data Source="&Server.MapPath(SqlDataBase)
SqlNowString="Now()"
SqlChar="'"
IsSqlVer="ACCESS"
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Else
'''''''''''''''''''''''''''''' SQL資料庫設置 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
SqlLocalName = "(local)" '連接IP [ 本地用 (local) 外地用IP ]
SqlUserName = "sa" 'SQL用戶名
SqlPassword = "1234" 'SQL用戶密碼
SqlDataBase = "bbsxp" '資料庫名
SqlProvider = "SQLOLEDB" '驅動程序 [ SQLOLEDB SQLNCLI ]
ConnStr="Provider="&SqlProvider&"; User ID="&SqlUserName&"; Password="&SqlPassword&"; Initial CataLog="&SqlDataBase&"; Data Source="&SqlLocalName&";"
SqlNowString="GetDate()"
IsSqlVer="MSSQL"
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
End If
'''''''''''''''''''''''''' 以下為專業人員設置選項,普通用戶請勿修改 ''''''''''''''''''''''''''
Session.CodePage="936" '936(簡體中文) 950(繁體中文) 65001(Unicode)
BBSxpCharset="GB2312" 'GB2312(簡體中文) Big5(繁體中文) UTF-8(Unicode)
Response.Charset=BBSxpCharset
Response.Buffer=True
%>
註:
上面bbsxp7b1版本用的是Aess資料庫,因為IsSqlDataBase=0
mysql資料庫可以修改表的日期格式嗎
日期型的欄位 存儲的格式是固定的不可以修改, 需要輸出時 轉換成需要的格式, 如果你不想輸出時轉換 那麼需要 設為字元型的, 存儲時轉換. 總之 不管先轉還是後轉 ,一定要轉
❸ 如何處理mysql中的時間戳讀取問題
1. MySQL 獲得當前時間戳函數:current_timestamp, current_timestamp()
mysql> select current_timestamp, current_timestamp();
+---------------------+---------------------+
| current_timestamp | current_timestamp() |
+---------------------+---------------------+
| 2008-08-09 23:22:24 | 2008-08-09 23:22:24 |
+---------------------+---------------------+
2. MySQL (Unix 時間戳、日期)轉換函數:
unix_timestamp(),
unix_timestamp(date),
from_unixtime(unix_timestamp),
from_unixtime(unix_timestamp,format)
下面是示例:
select unix_timestamp(); -- 1218290027
select unix_timestamp('2008-08-08'); -- 1218124800
select unix_timestamp('2008-08-08 12:30:00'); -- 1218169800
select from_unixtime(1218290027); -- '2008-08-09 21:53:47'
select from_unixtime(1218124800); -- '2008-08-08 00:00:00'
select from_unixtime(1218169800); -- '2008-08-08 12:30:00'
select from_unixtime(1218169800, '%Y %D %M %h:%i:%s %x'); -- '2008 8th August 12:30:00 2008'
3. MySQL 時間戳(timestamp)轉換、增、減函數:
timestamp(date) -- date to timestamp
timestamp(dt,time) -- dt + time
timestampadd(unit,interval,datetime_expr) --
timestampdiff(unit,datetime_expr1,datetime_expr2) --
請看示例部分:
select timestamp('2008-08-08'); -- 2008-08-08 00:00:00
select timestamp('2008-08-08 08:00:00', '01:01:01'); -- 2008-08-08 09:01:01
select timestamp('2008-08-08 08:00:00', '10 01:01:01'); -- 2008-08-18 09:01:01
select timestampadd(day, 1, '2008-08-08 08:00:00'); -- 2008-08-09 08:00:00
select date_add('2008-08-08 08:00:00', interval 1 day); -- 2008-08-09 08:00:00
MySQL timestampadd() 函數類似於 date_add()。
select timestampdiff(year,'2002-05-01','2001-01-01'); -- -1
select timestampdiff(day ,'2002-05-01','2001-01-01'); -- -485
select timestampdiff(hour,'2008-08-08 12:00:00','2008-08-08 00:00:00'); -- -12
select datediff('2008-08-08 12:00:00', '2008-08-01 00:00:00'); -- 7
MySQL timestampdiff() 函數就比 datediff() 功能強多了,datediff() 只能計算兩個日期(date)之間相差的天數。
❹ mysql 把時間換成時間戳進行存儲在int欄位中還是直接用datetime好
直接使用的 int 好,畢竟時間戳可以用FROM_UNIXTIME等時間函數轉換成時間格式, int 比datetime計算和比較簡單一點,還有是就是感覺數據量大度的話int應該比datetime更快一點。
公司資料庫大牛知,建的道所有的數據表關於時間的都是intint比datetime計算簡單,數據量大的話int比datetime儲存速度更快一點。
時間戳,一個完整的、可驗證的數據塊,它表示在特定時間之前存在的一段數據,通常是一個字元序列,標識某個時刻的時間。
利用數字簽名技術生成下一代數據,簽名對象包括原始文件信息、簽名參數、簽名時間等信息。廣泛應用於,知識產權保護、合同簽訂、財務核算、電子報價投標、股票交易等領域。
(4)mysql資料庫時間戳擴展閱讀:
有兩種類型的時間戳:
1.自建時間戳:這種時間戳是獲取時間接收設備到時間戳伺服器的時間戳,並通過時間戳伺服器發出時間戳證書。該時間戳可用於企業內部責任的確定,經法院證明不具有法律效力。它不能作為一個法律基礎,因為它很可能被篡改時,接收設備收到的時間。
2.具有法律效力的時間戳:是由中國科學院國家時間中心和北京聯合信託技術服務有限公司共同打造的中國第三方可信時間戳認證服務。國家計時中心負責計時和准時監控。
❺ 什麼是mysql 的時間戳
1、將時間轉換為時間戳
[sql] view plainprint?
select unix_timestamp('2009-10-26 10-06-07')
如果參數為空,則處理為當前時間
2、將時間戳轉換為時間
[sql] view plainprint?
select from_unixtime(1256540102)
有些應用生成的時間戳是比這個多出三位,是毫秒錶示,如果要轉換,需要先將最後三位去掉,否則返回NULL
UNIX_TIMESTAMP(date)
如果沒有參數調用,返回一個Unix時間戳記(從'1970-01-01 00:00:00'GMT開始的秒數)。如果UNIX_TIMESTAMP()用一個date參數被調用,它返回從'1970-01-01 00:00:00' GMT開始的秒數值。date可以是一個DATE字元串、一個DATETIME字元串、一個TIMESTAMP或以YYMMDD或YYYYMMDD格式的 本地時間的一個數字。
[sql] view plainprint?
mysql> select UNIX_TIMESTAMP();
-> 882226357
mysql> select UNIX_TIMESTAMP('1997-10-04 22:23:00');
-> 875996580
當UNIX_TIMESTAMP被用於一個TIMESTAMP列,函數將直接接受值,沒有隱含的「string-to-unix-timestamp」變換。
FROM_UNIXTIME(unix_timestamp)
以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回unix_timestamp參數所表示的值,取決於函數是在一個字元串還是或數字上下文中被使用。
[sql] view plainprint?
mysql> select FROM_UNIXTIME(875996580);
-> '1997-10-04 22:23:00'
mysql> select FROM_UNIXTIME(875996580) + 0;
-> 19971004222300
FROM_UNIXTIME(unix_timestamp,format)
返回表示 Unix 時間標記的一個字元串,根據format字元串格式化。format可以包含與DATE_FORMAT()函數列出的條目同樣的修飾符。
[sql] view plainprint?
mysql> select FROM_UNIXTIME(UNIX_TIMESTAMP(),
'%Y %D %M %h:%i:%s %x');
-> '1997 23rd December 03:43:30 x'
通過 UNIX_TIMESTAMP 函數把 MySQL 資料庫中的 date 類型數據轉換成 unix timestamp 形式的一個整形數字:
[sql] view plainprint?
select UNIX_TIMESTAMP('2006-02-28') testdate;
[sql] view plainprint?
按理說得到的時間戳應該可以直接拿來給 PHP 的 date() 等函數使用。但奇怪的是:
echo date("Y-m-d",$testdate);
顯示出來的日期跟資料庫實際的日期相比卻少了一天,百思不得其解。反復查看 MySQL 關於 UNIX_TIMESTAMP 函數的說明,終於發現問題所在:「The server interprets date as a value in the current time zone and converts it to an internal value in UTC.」 原來 MySQL 的 UNIX_TIMESTAMP 函數得到的時間戳是 UTC 時間,而不是伺服器設定的特定 Time zone 的時間。經過這樣一轉化,時間戳就憑空少了8個小時(對於咱這里來說),而 PHP 中的 timestamp 則計算的都是系統設定時區的當地時間。因此 2006-02-28 這個日期被減去了8個小時,自然變成了2006-02-27。
[sql] view plainprint?
解決方法:把這八個小時加回去(UNIX_TIMESTAMP('2006-02-28' + INTERVAL 8 HOUR));或者棄用 UNIX_TIMESTAMP 函數, 直接得到 MySQL date 字元串之後通過 strtotime() 函數來把字元串轉化成真正的本地時間戳。
找出下個月生日的動物也是容易的。假定當前月是4月,那麼月值是4,你可以找在5月出生的動物 (5月),方法是:
[sql] view plainprint?
mysql> SELECT name, birth FROM pet WHERE MONTH(birth) = 5;
.................
$conn=mysql_connect("localhost","root","1234")or die("連接資料庫失敗");
$conndb=mysql_select_db("test",$conn)or die("連接表失敗");
$query="select * from ttable";
$result = mysql_query($query,$conn);
while($row = mysql_fetch_array($result)){
$rows[]=$row;
}
$random =rand(0,count($rows));
print_r($rows[$random]);
❻ mysql時間戳轉換日期格式
時間戳轉時間:
mysql> select from_unixtime(1604730123);
+---------------------------+
| from_unixtime(1604730123) |
+---------------------------+
| 2020-11-07 14:22:03 |
+---------------------------+
1 row in set (0.02 sec)
時間戳格式化
mysql> SELECT from_unixtime(1604730123, '%Y-%m-%d %H:%i:%S');
+------------------------------------------------+
| from_unixtime(1604730123, '%Y-%m-%d %H:%i:%S') |
+------------------------------------------------+
| 2020-11-07 14:22:03 |
+------------------------------------------------+
1 row in set (0.00 sec)
函數:FROM_UNIXTIME
作用:將MYSQL中以INT(11)存儲的時間以"YYYY-MM-DD"格式來顯示。
語法:FROM_UNIXTIME(unix_timestamp,format)
返回表示 Unix 時間標記的一個字元串,根據format字元串格式化。format可以包含與DATE_FORMAT()函數列出的條目同樣的修飾符。
根據format字元串格式化date值。
下列修飾符可以被用在format字元串中:
%M 月名字(January……December)
%W 星期名字(Sunday……Saturday)
%D 有英語前綴的月份的日期(1st, 2nd, 3rd, 等等。)
%Y 年, 數字, 4 位
%y 年, 數字, 2 位
%a 縮寫的星期名字(Sun……Sat)
%d 月份中的天數, 數字(00……31)
%e 月份中的天數, 數字(0……31)
%m 月, 數字(01……12)
%c 月, 數字(1……12)
%b 縮寫的月份名字(Jan……Dec)
%j 一年中的天數(001……366)
%H 小時(00……23)
%k 小時(0……23)
%h 小時(01……12)
%I 小時(01……12)
%l 小時(1……12)
%i 分鍾, 數字(00……59)
%r 時間,12 小時(hh:mm:ss [AP]M)
%T 時間,24 小時(hh:mm:ss)
%S 秒(00……59)
%s 秒(00……59)
%p AM或PM
%w 一個星期中的天數(0=Sunday ……6=Saturday )
%U 星期(0……52), 這里星期天是星期的第一天
%u 星期(0……52), 這里星期一是星期的第一天
%% 一個文字「%」。
❼ 將MYSQL資料庫里的時間戳轉換成時間
from_unixtime()是MySQL里的時間函數
select uid,userid,username,email,FROM_UNIXTIME(addtime,'%Y年%m月%d') from members
以上例子是sql語句的例子,直接能將mysql的時間戳類型轉換成日期格式
date為需要處理的參數(該參數是Unix 時間戳),可以是欄位名,也可以直接是Unix 時間戳字元串
後面的 '%Y%m%d' 主要是將返回值格式化 (這里的時間格式可以動態定義)
例如:
mysql>SELECT FROM_UNIXTIME( 1249488000, '%Y%m%d' )
->20071120
mysql>SELECT FROM_UNIXTIME( 1249488000, '%Y年%m月%d' )
->2007年11月20
UNIX_TIMESTAMP()是與之相對正好相反的時間函數,將日期時間轉換為時間戳類型
UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date)
若無參數調用,則返回一個 Unix timestamp ('1970-01-01 00:00:00' GMT 之後的秒數) 作為無符號整數。若用date 來調用 UNIX_TIMESTAMP(),它會將參數值以'1970-01-01 00:00:00' GMT後的秒數的形式返回。date 可以是一個 DATE 字元串、一個 DATETIME字元串、一個 TIMESTAMP或一個當地時間的YYMMDD 或YYYMMDD格式的數字。
例如:
mysql> SELECT UNIX_TIMESTAMP() ; (執行使得時間:2009-08-06 10:10:40)
->1249524739
mysql> SELECT UNIX_TIMESTAMP('2009-08-06') ;
->1249488000
使用 FROM_UNIXTIME函數,具體如下: FROM_UNIXTIME(unix_timestamp,format) 返回表示 Unix 時間標記的一個字元串,根據format字元串格式化。format可以包含與DATE_FORMAT()函數列出的條目同樣的修飾符。 根據format字元串格式化date值。下列修飾符可以被用在format字元串中: %M 月名字(January……December) %W 星期名字(Sunday……Saturday) %D 有英語前綴的月份的日期(1st, 2nd, 3rd, 等等。) %Y 年, 數字, 4 位 %y 年, 數字, 2 位 %a 縮寫的星期名字(Sun……Sat) %d 月份中的天數, 數字(00……31) %e 月份中的天數, 數字(0……31) %m 月, 數字(01……12) %c 月, 數字(1……12) %b 縮寫的月份名字(Jan……Dec) %j 一年中的天數(001……366) %H 小時(00……23) %k 小時(0……23) %h 小時(01……12) %I 小時(01……12) %l 小時(1……12) %i 分鍾, 數字(00……59) %r 時間,12 小時(hh:mm:ss [AP]M) %T 時間,24 小時(hh:mm:ss) %S 秒(00……59) %s 秒(00……59) %p AM或PM %w 一個星期中的天數(0=Sunday ……6=Saturday ) %U 星期(0……52), 這里星期天是星期的第一天 %u 星期(0……52), 這里星期一是星期的第一天 %% 一個文字「%」。
❽ 什麼是mysql 的時間戳
時間戳是自 1970 年 1 月 1 日(00:00:00 GMT)以來的秒數。它也被稱為 Unix 時間戳(Unix Timestamp)。