MySQL で一般的に使用される日付と時刻のタイプは、datetime と timestamp です。このうち、datetime は 5 バイトを占めます (8 バイトを占めるのは間違いであり、デフォルトではミリ秒が節約されないとするドキュメントもあります)。
データ型には DATETIME と TIMESTAMP の 2 つがあり、どのように選択するかはビジネス要件によって異なりますが、このうち DATETIME の方が占有バイト数は多くなりますが、表現できる範囲が広くなります。TIMESTAMP はパーティション列には使用できません。このデータ型はタイム ゾーンによって制限され、データベースのタイム ゾーンの影響を受けるためです。
テーブルを作成するときは、時間を節約する必要があり、ミリ秒の値まで正確である必要があるため、SQL を使用します。公式 Web サイトには次の説明があります: MySQL では、 TIME 、 DATETIME 、および TIMESTAMP 値に対する小数秒 のサポート があり 、 最大からマイクロ秒 (6 桁) までの精度: 3 を意味します。 すべての型は、通常ミリ秒と呼ばれる小数秒をサポートします。タイムスタンプが占めるバイト数が少ないため、TIMESTAMP データ型が選択されます。
CREATE TABLE `s_schedule_log` (
`log_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'log主健',
`job_id` int(11) DEFAULT NULL COMMENT '任务id',
`job_name` varchar(100) DEFAULT NULL COMMENT '任务名称',
`execute_result` varchar(10) DEFAULT NULL COMMENT '执行结果。字典EXECUTE_RESULT',
`result_info` varchar(255) DEFAULT NULL COMMENT '执行结果信息',
`start_time` TIMESTAMP NULL DEFAULT NULL COMMENT '开始时间',
`end_time` TIMESTAMP NULL DEFAULT NULL COMMENT '结束时间',
`error_msg` varchar(255) DEFAULT NULL COMMENT '执行失败时的错误信息',
PRIMARY KEY (`log_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='定时任务执行日志'
実際の操作中に、ミリ秒の値が保存されていないことが判明し、実行中のスクリーンショットとデータのスクリーンショットは次のとおりです
図からミリ秒の部分はコードの挿入・更新時に引き継がれており、その時点ではデータベースに保存されていないことが分かります。部分では、 という構文を使用します ( は TIME 、 DATETIME、 またはTIMESTAMP 、は 秒の小数点以下の精度です)。次に例を示します。type_name
(fsp
)type_name
fsp
CREATE TABLE t1 (t TIME(3), dt DATETIME(6));
値 fsp
を指定する場合は、0 ~ 6 の範囲にする必要があります。値 0 は、小数部がないことを意味します。省略した場合、デフォルトの精度は 0 です (これは、以前の MySQL バージョンとの互換性を考慮した標準 SQL のデフォルトの 6 とは異なります)。
これは、ミリ秒の部分をパラメータとしてデータ型に渡す必要があることを意味します。デフォルトでは、ミリ秒は保存されず、1 ~ 6 桁が保存されます。3 桁のミリ秒値を保存する必要がある場合は、データ型を DATETIME(3) または TIMESTAMP(3) として定義できます。ミリ秒を保存する必要がない場合は、型を DATETIME TIMESTAMP として直接書き込むだけです。 。