การจัดเก็บเวลาด้วยมิลลิวินาทีในฐานข้อมูล


10

เพียงคำถามสั้น ๆ เกี่ยวกับการจัดเก็บ "เวลา" ในฐานข้อมูล ฉันบันทึกเวลาที่ผู้ใช้ทำงานซึ่งอยู่ในรูปแบบ 00: 00: 00: 00 (ชั่วโมง, นาที, วินาที, มิลลิวินาที)

เดิมทีฉันจะเก็บมันไว้TIMEแต่แล้วฉันก็รู้ว่า MySQL ไม่รองรับมิลลิวินาทีในประเภทนี้

ฉันจะจัดเก็บเวลาจริงที่ถ่ายจากนาฬิกาจับเวลาของผู้ใช้ไม่ใช่เวลาที่พวกเขาวิ่งและสิ้นสุด (นี่จะถูกคำนวณก่อนที่จะถูกแทรก)

ประเภทเขตข้อมูลที่ดีที่สุดที่จะใช้คืออะไร ผมคิดว่าอย่างใดอย่างหนึ่งdoubleหรือfloatแต่ผมไม่แน่ใจว่าจะทำงานอย่างไร

คำตอบ:


6

โดยส่วนตัวฉันจะใช้ประเภทจำนวนเต็มเป็นระยะเวลา

ตัวอย่าง: 340,000 มิลลิวินาทีเป็น 340000 ในคอลัมน์ int ที่ไม่ได้ลงชื่อ

สำหรับฉัน datetime เวลาวันที่และอื่น ๆ มีไว้เพื่อจุดที่ชัดเจน 340 วินาทีนั้นไร้ความหมายในบริบทนั้น การเริ่มต้นdate/timeช่วยให้สามารถเพิ่มระยะเวลาของหลักสูตรได้


3
มีintervalชนิดข้อมูลSQL มาตรฐานสำหรับวัตถุประสงค์นี้เท่านั้น แต่ไม่ใช่ DBMS ทั้งหมด (และไม่รองรับ MySQL)
a_horse_with_no_name

ขอบคุณสำหรับคำตอบของคุณฉันจะต้องแปลงเป็นรูปแบบมาตรฐานเหมือนในปัจจุบันในรูปแบบ 00: 00: 00: 00 หรือไม่ ฉันสามารถตั้งค่าคอลัมน์ให้อนุญาตรูปแบบประเภทนั้นได้หรือไม่
Elliott

@Elliott: สำหรับการแสดงคุณสามารถทำได้ เป็นเพียงตัวเลขเท่านั้น
gbn

1
โปรดทราบว่ารูปแบบของคุณอาจเป็น (หรือควรอ่านได้) 00: 00: 00.000 (สังเกตจุดแทนเครื่องหมายโคลอนและ 3 หลักเป็นมิลลิวินาที
Jannes

2

ขึ้นอยู่กับระยะเวลาที่คุณต้องการวัด หากคุณจะไม่บันทึกนานกว่า 2 ^ 32 หรือ 4294967296 ms มากกว่า int ที่ไม่ได้ลงนามปกติก็ใช้ได้ ที่สอดคล้องกับเวลานาฬิกาประมาณ 50 วัน btw

หากคุณกำลังจัดเก็บการประทับเวลายูนิกซ์หรือช่วงเวลาที่มีขนาดใหญ่แล้วดูที่การใช้ bigint สิ่งนี้จะช่วยให้คุณมีพื้นที่ 8 ไบต์หรือความสามารถในการบันทึกเวลานานเท่าที่ 1.84467440737096e + 19 ms (ซึ่งประมาณ 500 ล้านปี)


1

หากคุณใช้ MySQL 5.6.4 หรือในภายหลังคุณสามารถใช้TIME(3), DATETIME(3)และTIMESTAMP(3)ประเภทคอลัมน์เก็บได้ถึง 6 หลักเศษส่วน (แทนที่3ด้วยจำนวนตัวเลขที่เป็นเศษส่วนที่คุณต้องการ) ส่วนที่เป็นเศษส่วนถูกเพิ่มเข้าไปในสตริงเวลาหลังจากจุด; ตัวอย่าง: 2018-09-08 17:51:04.781.

การอ้างอิงอย่างเป็นทางการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.