나는 저를 놀라게 한 어떤 것을 뛰어 보았습니다.SQL Server Compact에서 datetime 형식의 값이 왜 반올림됩니까?
WinPcap
을 사용하여 네트워크에서 데이터를 수집합니다. 내부적으로 WinPcap
은 Windows 성능 카운터를 사용하여 해당 타임 스탬프를 생성합니다. 나는 그것들이 표류하기 쉽다는 것을 알고 있지만, 그럼에도 불구하고이 타임 스탬프들은 마이크로 초 수준의 정밀도를 가지고 있습니다.
SQL Server Compact 4.0 데이터베이스에 datetime
값으로이 타임 스탬프를 삽입하고 나중에 추출하면 정밀도가 밀리 초로 떨어졌습니다. SQL 서버는 .000, .003 또는 .007 밀리 초에 datetime
유형 값을 반올림 here을 읽을 수 있기 때문에 예를 들어
10:52:19.706084 -> 10:52:19.706000
는 지금, 나는있다. 그것은 무슨 일이 일어나고 있는지 설명합니다.
이제 datetime
필드는 데이터를 저장하는 데 8 바이트를 사용하며, 날짜는 4 바이트, 자정 이후 밀리 초는 4 바이트입니다. 그러나 DateTime.ToBinary()
으로 전화하면 모든 정밀도의 값을 나타내는 8 바이트 숫자가 반환됩니다. 실제로이 값을 bigint
열의 데이터베이스에 기록한 다음 해당 값을 추출 할 때 DateTime.FromBinary()
을 호출하면 동일한 정밀도로 원래 값을 얻게됩니다.
이 방법을 사용하려고하지만 여전히 궁금합니다. datetime
형식의 SQL Server Compact에서 DateTime
의 ToBinary/FromBinary 저장소 메커니즘을 사용하지 않은 이유는 무엇입니까?
편집 : 아론 버트 랜드가 바르게 지적한대로
, SQL 컴팩트 datetime2
를 지원하지 않습니다. 또한 datetime2
은 일반 SQL Server에서 54 바이트가 아니라 6 바이트, 7 바이트 또는 8 바이트를 사용합니다. 그래도 내 기본적인 질문은 여전히 남아 있습니다.
이 도움이 될 수 있습니다 : http://stackoverflow.com/questions/12729972/allow-entity-framework-4-5-to-use-datetime2-with-sql-server-ce4 –
또한 컴팩트 생각하지 않습니다 'datetime2'를 지원합니다. 그리고 "일반"SQL Server에서는 54 바이트 (오히려 6, 7 또는 8 바이트)를 사용하지 않습니다 (http://msdn.microsoft.com/en-us/library/bb677335.aspx). 이'nvarchar (27) 비트에 대한 공식 소스를 인용 할 수 있습니까? –
다시 한번 생각해 보니, 두 분 모두 맞습니다. 여기가 내가보고 있었지만 분명히 가까이 있지 않았다. http : //msdn.microsoft.com/en-us/library/bb677335(v=sql.100).aspx –