2017-11-09 3 views
0

UTC_TIMESTAMP()CONCAT (UTC_DATE(), '', UTC_TIME())は機能的に同じですか?UTC_TIMESTAMP()VS. CONCAT(UTC_DATE()、 ''、UTC_TIME())

編集:私はそれをテストする場合

UTC_TIMESTAMP()はUNIX TIMESTAMPを返しません。 (MariaDB 10.xの場合) enter image description here

+0

実際に関連するタグを使用すると、MySQLでないMariaDBを使用します。 –

+0

@Used_By_既に申し訳ありません。あなたの編集をありがとう。 – Saturn

答えて

1

いいえUTC_TIMESTAMPは文字列または数値を返します.CONCATは文字列を返します。

UTC_TIMESTAMP、UTC_TIMESTAMP([FSP])

が 'YYYY-MM-DD HH:MM:SS' の値と現在のUTCの日付と時刻を返すかどうかに応じて、またはYYYYMMDDHHMMSS形式関数 は、文字列または数値のコンテキストで使用されます。 https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_utc-timestamp

https://mariadb.com/kb/en/library/utc_timestamp/


CONCAT(str1は、STR2、...)

は引数を連結した結果の文字列を返します。

https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_concat

https://mariadb.com/kb/en/library/concat/

create table test (real_ts timestamp, fake_ts varchar(40)); 
insert into test (real_ts, fake_ts) 
values (utc_timestamp()+6, CONCAT (UTC_DATE(), '', UTC_TIME())); 
select 
* 
from test; 
 
real_ts    | fake_ts   
:------------------ | :----------------- 
2017-11-09 06:57:15 | 2017-11-0906:57:09 
insert into test (real_ts) 
values (utc_timestamp()+6) 
; 
insert into test (real_ts) 
values (CONCAT (UTC_DATE(), '', UTC_TIME())+6) 
; 
 
Truncated incorrect DOUBLE value: '2017-11-0906:57:09' 

dbfiddle here

+0

したがって、文字列(YYYY-MM-DD HH:MM:SS形式)を**返すためにのみUTC_TIMESTAMP()を使用すると、それらは同じですか? – Saturn

+0

は同じではありません(あなたがdocoから見ることができます)が、両方のアプローチが文字列として使われるとき、両方から同じ文字列が得られます。私はそれが微妙な違いであることを知っています、それは異なっています。 –

+0

今私はあなたの意図を見ます。どうもありがとうございました。 – Saturn

1

私はは(それがうまくいく場合も)CONCATを信頼しないでしょう。実装が真夜中のちょうど前にと呼ばれ、ちょうどUTC_TIME()と呼ばれる場合、どうでしょうか?おっと、一緒になった弦は一日オフです!

+0

このような状況の可能性は非常に低いと思いますが、それは妥当と思われます。あなたが言うように厳密さに問題があります。 – Saturn

+0

私は理解するのに数日かかる狡猾なバグは好きではありません。私がバグを見つけ出すとき、私は満足していると感じています(最初にそれを防ぐのではない)。それで、残りのコードが他の微妙なバグで埋まってしまうのではないかと心配しています。 –