Jenis Data DateTime Pelayan SQL: Millisaat yang Hilang
Ketepatan data adalah penting, terutamanya apabila berurusan dengan cap masa. Walau bagaimanapun, jenis datetime
SQL Server memberikan masalah biasa: kehilangan milisaat. Artikel ini meneroka sebab ini berlaku dan menawarkan penyelesaian.
Pertimbangkan senario ini: data dimasukkan menggunakan:
<code class="language-sql">INSERT INTO TESTTABLE (IntField, BitField, StringField, DateField) VALUES ('1', 1, 'hello', {ts '2009-04-03 15:41:27.378'});</code>
Mendapatkan semula data dengan:
<code class="language-sql">select * from testtable with (NOLOCK)</code>
mendedahkan DateField
terpenggal: "2009-04-03 15:41:27.377". milisaat terakhir hilang.
Punca Masalah
Keterbatasan jenis data datetime
adalah puncanya. SQL Server datetime
hanya menyokong ketepatan masa hingga lebih kurang 1/300 saat (0, 3 atau 7 milisaat). Nilai di luar kenaikan ini dibundarkan ke bawah. Ini menerangkan milisaat yang hilang dalam contoh kami.
Mencapai Ketepatan Milisaat
Untuk mengekalkan ketepatan milisaat, kaedah alternatif diperlukan. Tidak ada satu penyelesaian yang sempurna, tetapi dua pendekatan biasa ialah:
Medan Angka: Simpan cap masa sebagai nilai angka (cth., mewakili milisaat sejak zaman itu). Ini memerlukan kod tersuai untuk menukar kepada dan daripada format yang boleh dibaca manusia.
Perwakilan Rentetan: Simpan cap masa sebagai rentetan menggunakan format yang konsisten (cth., 'YYYY-MM-DD HH:mm:ss.fff'). Secara pilihan, sertakan medan datetime
anggaran untuk pertanyaan yang lebih pantas.
Kedua-dua kaedah menambah kerumitan. Nilai dengan teliti keperluan untuk ketepatan milisaat berbanding reka bentuk tambahan dan overhed penyelenggaraan.
Atas ialah kandungan terperinci Mengapa Pelayan SQL Kehilangan Milisaat Apabila Menyimpan Data DateTime?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!