Randolph West shows us how the DATETIMEOFFSET type is stored in SQL Server:
Cast your mind back to our discussion on
DATETIME2
. As you know,DATETIME2
is basically the same as squishingDATE
(3 bytes) andTIME
(between 3 and 5 bytes depending on the scale) into the same column. You end up with a persisted value that is between 6 and 8 bytes wide.
DATETIMEOFFSET
is kinda sorta the same thing, but with more bytes on the end. If you take a look at the Microsoft Docs page, the similar idea of a varied column size is retained. For a scale of 0 fractions of a second you only need 8 bytes to store your value, while the default scale of 7 decimal places for storing seconds requires the full 10 bytes.
Click through to understand how the sordid details.