関数がストリングで使用されているか、もしくは数値コンテキストで使用されているかによって、現在の日付を 'YYYY-MM-DD HH:MM:SS'
または YYYYMMDDHHMMSS
フォーマットの値で戻します。
SYSDATE()
は、それが実行された時間を戻します。これは NOW()
の動作によって異なり、ステートメントが実行を開始する時間を示す定数時間を戻します。( ストアド ルーチンまたはトリガ内で、NOW()
はルーチンまたはトリガ文が実行を開始する時間を戻します。)
mysql>SELECT NOW(), SLEEP(2), NOW();
+---------------------+----------+---------------------+ | NOW() | SLEEP(2) | NOW() | +---------------------+----------+---------------------+ | 2006-04-12 13:47:36 | 0 | 2006-04-12 13:47:36 | +---------------------+----------+---------------------+ mysql>SELECT SYSDATE(), SLEEP(2), SYSDATE();
+---------------------+----------+---------------------+ | SYSDATE() | SLEEP(2) | SYSDATE() | +---------------------+----------+---------------------+ | 2006-04-12 13:47:44 | 0 | 2006-04-12 13:47:46 | +---------------------+----------+---------------------+
そのほか、 SET TIMESTAMP
文は NOW()
によって戻された値に影響を及ぼしますが、SYSDATE()
によって戻された値には影響しません。つまり、バイナリ ログのタイムスタンプ設定は、SYSDATE()
の呼び出しには効果をもたらさないということになります。
SYSDATE()
は同じステートメントの中でも、異なる値を戻すことができ、また SET TIMESTAMP
に影響を受けないため、これは非決定性であり、従ってステートメントに基づくバイナリ ロギングが使用されている場合、複製は安全でないということになります。これが問題になる場合は、行ベースのロギングを使用するか、または
--sysdate-is-now
オプションでサーバを起動して、SYSDATE()
が NOW()
のエイリアスになるようにしてください。