Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

MySQL DECIMAL(x,0)의 범위는 무엇입니까?

<시간/>

DECIMAL 데이터 유형의 범위가 INTEGER 데이터 유형 및 BIGINT보다 큽니다. 우리가 알고 있듯이 BIGINT는 18446744073709551615를 저장할 수 있는 반면 DECIMAL에서는 DECIMAL(65,0)을 저장할 수 있습니다. 여기서 x는 65개의 9(9)를 나타냅니다. DECIMAL은 숫자를 바이트 단위로 저장하고 저장 요구 사항 공식은 DECIMAL(x,0) 즉

입니다.
StorageRequirementInBytes =(x/9) + 나머지;WHERE 나머지 =round_up( (x%9) / 2 )

DECIMAL(65,0) 스토리지는 다음과 같습니다 -

99999999999999999999999999999999999999999999999999999999999999999

위에서 논의한 내용을 이해하기 위해 테이블을 생성해 보겠습니다. 테이블을 생성하는 쿼리는 다음과 같습니다 -

mysql> Create table DecimalDemo-> (-> UserId DECIMAL(65,0)-> );Query OK, 영향을 받는 행 0개(0.62초)

이제 insert 명령을 사용하여 테이블에 일부 레코드를 삽입할 수 있습니다. 쿼리는 다음과 같습니다 -

의 MySQL> 삽입 DecimalDemovalues로 (99999999999999999999999999999999999999999999999999999999999999999) 쿼리 OK 1 열 영향 (0.16 초)의 MySQL> 삽입 DecimalDemovalues로 (99999999999999999999999999999999999999999999999999999999999999999.0) 쿼리 OK 1 열 영향 (0.28 초)  

select 문을 사용하여 테이블의 모든 레코드를 표시합니다. 쿼리는 다음과 같습니다 -

mysql> DecimalDemo에서 *선택;

출력

+---------------------------------------------- ----------------------+| 사용자 ID |+----------------------------------------------- --------------------+| 99999999999999999999999999999999999999999999999999999999999999999 || 999999999999999999999999999999999999999999999999999999999999999999 |+----------------------------------------------- --------------------+2행 세트(0.00초)

테이블 생성 시 66을 제공하려고 하면 다음 오류가 발생합니다. -

mysql> 테이블 DecimalDemo1-> 생성(-> UserId DECIMAL(66,0)-> ), 오류 1426(42000):'UserId'에 대해 너무 큰 정밀도 66이 지정되었습니다. 최대값은 65입니다.