SQL Server에서는 FLOAT
또는 REAL
을 사용하여 IEEE 754 표준에 정의 된 저장 형식이 지워진 부동 소수점 값을 저장할 수 있습니다. 고정 소수점 값의 경우 DECIMAL
유형 (동의어는 NUMERIC
)을 사용할 수 있습니다. 그러나 나는 SQL Server가 DECIMAL
값을 내부적으로 저장하는 방법을 잘 모릅니다. 예를 들어, 나는 테이블을 정의하면 다음과 같은 행을 삽입 :SQL Server는 decimal 형식 값을 내부적으로 어떻게 저장합니까?
01 70 E0 00 00
이 진수 : SQL 서버 저장 숫자 5.7456, 나는이있어 어떻게
IF OBJECT_ID('dbo.test_number_types') IS NOT NULL DROP TABLE dbo.test_number_types;
CREATE TABLE dbo.test_number_types
(
id INT IDENTITY(1, 1),
c1 NUMERIC(5, 4)
)
GO
INSERT INTO dbo.test_number_types(c1)VALUES(5.7456);
내가 DBCC PAGE
명령을 사용
01 70 E0 00 00
으로 바꾸는 방법과 정수 부분에 대한 바이트 수와 소수 부분에 대한 바이트 수를 결정하는 방법을 이해할 수 없습니다. 누구든지 도와 줄 수 있습니까?
BTW, "SQL Server 2012 Internals"책을 확인했습니다. 데이터 유형 저장 전용 장이 있습니다. 그런데 DECIMAL
유형 저장은 책에서 언급되지 않는다.
힌트 : BCD, 이진화 십진법 (https : //로 갖추고 있습니다. wikipedia.org/wiki/Binary-coded_decimal). 이것이 SQL Server가 실제로 값을 저장하는 방법입니다. 그러나 다른 언어로 고정 소수점 값을 저장하는 것은 매우 일반적인 방법입니다. –
Gordon에게 감사드립니다. 내가 한번 볼게. –
@ GordonLinoff 시도했는데 BCD 인코딩이 아닌 것 같습니다. –