Rumah >pangkalan data >tutorial mysql >Mengapa Pelayan SQL Kehilangan Milisaat Apabila Memasukkan Nilai Datetime?

Mengapa Pelayan SQL Kehilangan Milisaat Apabila Memasukkan Nilai Datetime?

DDD
DDDasal
2025-01-13 08:32:44575semak imbas

Why Does SQL Server Lose Milliseconds When Inserting Datetime Values?

Isu ketepatan tarikh dan masa SQL Server

Apabila memasukkan nilai ke dalam lajur datetime dalam SQL Server, anda mungkin mengalami kehilangan milisaat yang tidak dijangka. Contohnya, pertanyaan berikut:

<code class="language-sql">BEGIN
   INSERT INTO TESTTABLE (IntField, BitField, StringField, DateField) 
   VALUES ('1', 1, 'hello', {ts '2009-04-03 15:41:27.378'});

   SELECT SCOPE_IDENTITY()  
END</code>

Selepas itu menggunakan pertanyaan SELECT * FROM TESTTABLE WITH (NOLOCK), nilai lajur DateField mungkin muncul sebagai:

<code>2009-04-03 15:41:27.*377*</code>

Penjelasan perbezaan dalam ketepatan milisaat

Kehilangan milisaat yang ketara ini disebabkan oleh had storan SQL Server. Ketepatan masa SQL Server adalah lebih kurang 1/300 saat, dan selang ini sentiasa jatuh pada 0, 3 dan 7 milisaat. Oleh itu, dalam contoh di atas, nilai dibundarkan ke bawah kepada selang 3 milisaat yang terdekat, menghasilkan akhiran .377 yang diperhatikan.

Memenuhi Cabaran Ketepatan Milisaat

Jika ketepatan milisaat adalah kritikal, tiada penyelesaian mudah. Penyelesaian yang dicadangkan termasuk:

  • Medan angka tersuai: Simpan cap masa sebagai medan angka tersuai dan bina semula apabila diperoleh semula.
  • Storan Rentetan: Simpan cap masa sebagai rentetan dalam format yang diketahui.

Walaupun kaedah ini menambah kerumitan tambahan, kaedah ini boleh memberikan ketepatan yang diperlukan apabila ketepatan milisaat benar-benar diperlukan.

Atas ialah kandungan terperinci Mengapa Pelayan SQL Kehilangan Milisaat Apabila Memasukkan Nilai Datetime?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn