2011-08-22 1 views
9

BIGINT은 MySql에서 사용할 수있는 가장 큰 정수입니다. 맞습니까?mysql에서 20 자리 이상의 정수가 필요할 때 어떻게해야합니까?

예를 들어 BIGINT (80)를 저장할 때해야 할 일은 무엇입니까?

어떤 경우 Twitter API 문서의 어딘가에있는 것처럼 왜이 큰 정수를 varchar으로 저장 하시겠습니까?

하나의 유형 또는 다른 유형을 선택하는 가장 큰 이유는이 경우입니까?

+0

BIGINT는 정의상 8 바이트로 제한됩니다. – mozillanerd

답변

18

큰 정수는 실제로 20 자리로 제한되지 않으며 64 비트로 표현할 수있는 숫자로 제한됩니다 (예 : 숫자가 20 자리 임에도 불구하고 99,999,999,999,999,999,999은 유효한 큰 정수가 아닙니다).

이 제한이있는 이유는 네이티브 형식의 정수를 기본 하드웨어가 비교적 빠르게 조작 할 수있는 반면 숫자의 텍스트 버전은 한 번에 한 자리 수씩 처리해야하기 때문입니다.

가장 큰 64 비트 부호없는 정수 18,446,744,073,709,551,615보다 큰 숫자를 원할 경우 varchar (또는 다른 텍스트 필드)으로 저장해야하며 많은 수학적 조작이 필요하지 않기를 바랍니다 .

또는 더 큰 범위는 있지만 덜 정밀한 부동 소수점 숫자 또는 정수 값으로 65 자리를 제공 할 수있는 십진수를 조사 할 수 있으며 decimal(65,0)을 열 유형으로 사용할 수 있습니다.

+0

'ORDER'와'WHERE' 문장에 가장 적합한 것은 어느 것입니까? (적절히 정돈 된 인덱스 사용). 예를 들어'SELECT column1 FROM tableA where mybigint> N ORDER BY date LIMIT 100000'과 같이 입력하십시오. 이 경우 결과 매김에 사용됩니다. –

+0

@Keyne, 10 진수 값은 정상적으로 작동하지만 원시 정수 계열보다 느립니다. 속도의 계층 구조는 아마도 다양한 원시 integrals, 소수점, 제로 - 정당화 varchars과 (가장 빠른 가장 느린) unjustified varchars 것입니다하지만 당신은 그물에 어떤 yobbo의 조언을 신뢰해서는 안됩니다 : 심지어) 측정, 맞춰봐. 그런 다음 필요한 범위를 제공하는 가장 빠른 방법을 사용하십시오. 특히 80 자리가 필요한 경우에는 양쪽 정렬 된 varchars를 사용하십시오 (예 : 42는 '0000000000 ... 000000042'로 저장됩니다). ... – paxdiablo

+0

... 25 자리 숫자로, 아마 10 진수 (25,0)입니다. 19 자리 숫자는 bigint입니다. 등등. 스키마가 영원히 잠겨 있지 않습니다.어떤 시점에서 19 자리에서 25 자리로 이동해야한다면 bigint에서 십진수로 변경해야합니다. 그렇지 않으면 YAGNI 원칙이 적용될 수 있습니다. – paxdiablo

3

numeric(65,0)을 지정할 수 있지만 더 커질 필요가있는 경우 varchar가 필요합니다.

하나를 선택하는 이유는 사용법, 효율성 및 공간입니다. int를 사용하는 것이 bigint보다 효율적입니다. 또는 수학을 할 필요가 있다면 숫자로 생각합니다.

2

저장 효율을 최대로 높이려면이 큰 정수를 an arbitrary binary string으로 저장할 수 있습니다.

하지만 그럴 가치가 있는지 확실하지 않은 이유는 응용 프로그램에서 64 비트 정수 이상을 처리해야하기 때문입니다. 또한 이유가 없으면 not the thing you want to do입니다.

더 간단하게 유지하고 varchar을 사용하는 것이 좋습니다.

-4

BIGINT는 정의에 의해 8 자리로 제한됩니다. DECIMAL 유형의 최대 자릿수는 64입니다. VARCHAR을 사용하여 더 큰 정밀도의 값을 저장하고 이러한 값의 직접적인 계산이 없음을 알아야합니다.

+4

바이트가 아니라 숫자입니다. – yan

관련 문제