2013-08-01 4 views
2

나는 저를 놀라게 한 어떤 것을 뛰어 보았습니다.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 바이트를 사용합니다. 그래도 내 기본적인 질문은 여전히 ​​남아 있습니다.

+0

이 도움이 될 수 있습니다 : http://stackoverflow.com/questions/12729972/allow-entity-framework-4-5-to-use-datetime2-with-sql-server-ce4 –

+0

또한 컴팩트 생각하지 않습니다 'datetime2'를 지원합니다. 그리고 "일반"SQL Server에서는 54 바이트 (오히려 6, 7 또는 8 바이트)를 사용하지 않습니다 (http://msdn.microsoft.com/en-us/library/bb677335.aspx). 이'nvarchar (27) 비트에 대한 공식 소스를 인용 할 수 있습니까? –

+0

다시 한번 생각해 보니, 두 분 모두 맞습니다. 여기가 내가보고 있었지만 분명히 가까이 있지 않았다. http : //msdn.microsoft.com/en-us/library/bb677335(v=sql.100).aspx –

답변

2

전체 내부 세부 사항이나 동기를 알지 못하지만 datetime은 내부적으로 두 개의 4 바이트 정수로 저장됩니다. 하나는 날짜를 나타내고 다른 하나는 시간을 나타냅니다. SQL Server의 첫 번째 버전 이후로 틱/밀리 초가 처리 되었기 때문에 후자에서 일부 정밀도를 잃어 버렸다고 생각합니다. 그러나 다시 저수준 구현 세부 사항을 알지 못합니다. 더 배경 정보를

관련 질문 : 당신이 바이너리 형식에서 값을 이동하지 않고 원하는 정밀도를 지원하기 위해

What is the internal representation of datetime in sql server?

Allow Entity Framework 4.5 to use datetime2 with SQL Server CE4

, 나는 LocalDB를 사용하는 것이 좋습니다 것이다 는 컴팩트 형과 동일한 이식성 장점을 가지고 있지만 더 많은 기능 제한 (예 : datetime2 유형의보다 정확한 지원 - 사용자가 6 ~ 8 바이트가 아니라 54 :-)을 사용하는 것과 같은 이점이 있습니다.

+0

아론, 도와 줘서 고마워. 대단히 감사합니다. –