mysql에서 int (11)의 열 크기는 바이트 단위입니까?


488

int(11)mysql에서 열의 크기는 바이트 단위입니까?

이 열에 저장할 수있는 최대 값은?



1
@cellepo 하나는 일반 SQL이고 다른 하나는 mysql에 고유합니다 (더 많은 뷰가 있습니다). 당신이 속박 사냥에 가고 싶어하고 빨리 한 투표에서 그들을 닫으 려면 SOBotics 채팅을 방문 하고 핑. 하지만 mysql도착하기 전에 닫을 태그를 지정해야합니다 . Thx
Drew

6
얘들 아. 복제 가능성이 있지만 검색하기가 더 쉽습니다. 대부분의 사람들은 int (11)를 사용하여 이와 같이 검색합니다. 그리고 그것은 다른 사람들의 질문을 해결하고 있습니다. 다른 뷰와 비교하여 뷰 수를 확인할 수 있습니다. 사용자는 여기에서 더 자세한 답변을 찾을 수 있습니다.
Gaurav

답변:


685

INT항상 4 일 지정 어떤 길이에 상관없이 바이트 것입니다.

  • TINYINT = 1 바이트 (8 비트)
  • SMALLINT = 2 바이트 (16 비트)
  • MEDIUMINT = 3 바이트 (24 비트)
  • INT = 4 바이트 (32 비트)
  • BIGINT = 8 바이트 (64 비트)

길이는 mysql 명령 행 클라이언트로 데이터를 선택할 때 채울 문자 수를 지정합니다. 저장된 12345 int(3)는 여전히 12345로 표시되지만, 여전히 저장된 경우 int(10)12345로 표시되지만 처음 5 자리를 채울 수있는 옵션이 있습니다. 예를 들어, 추가 한 경우 ZEROFILL0000012345로 표시됩니다.

... 최대 값은 2147483647 (서명) 또는 4294967295 (부호 없음)입니다.


111
여기서 int (11)에서 11의 의미는 무엇입니까?
Gaurav

73
열 INT (4), 정수 1은 열이 zerofill로 지정된 경우에만 0001로 표시됩니다. 그렇지 않으면 추가 숫자없이 숫자 1로 표시됩니다. @Gaurav-mysql이 데이터를 표시하는 방법과 데이터를 저장하는 방법을 혼합하지 마십시오. 두 가지가 다릅니다. 당신이 보는 것은 그것이 실제로 아닐 수도 있습니다.
Michael JV

13
@Michael 와우, 정말 흥미 롭습니다. 따라서 INT (3) 열을 만들고 값 5001을 저장하면 5001이 저장되지만 1 만 표시됩니다.
andrewtweber 2016 년

16
@andrewtweber : 필드가로 정의 된 것처럼 5001표시 5001됩니다 INT(3). 아래 및 여기에서 @priyabagus 답변을 참조 하십시오 .
go2null

10
정수 필드의 길이를 제공하지 않으면 MySQL이 기본값을 설정합니다 (tinyint 4, smallint 6, mediumint 9, int 11, bigint 20) 이러한 기본 길이는 숫자를 표시하기에 충분하다는 점에 유의하십시오 이 필드에 저장할 수 있습니다 (예 : smallint max 값은 2 ^ 16 = 65536, 5 자리입니다) 그렇지 않은 경우를 제외하고는 다른 놀라움을 피하기 위해 기본 크기를 그대로 두는 것이 좋습니다.
Thibault Witzig

167

INT ( x )display의 용어 , 즉 x 숫자로 숫자 를 표시하고 11로 제한되지 않고 차이를 만듭니다 .을 사용하여 짝 ZEROFILL을 이루면 길이와 일치 할 때까지 0이 앞에 붙습니다.

따라서, 임의의 수에 대한 XINT(x)

  • 저장된 값보다 작은 경우 자리 (X)를 , ZEROFILL0을 붙일 것이다.

    INT (5) ZEROFILL 표시한다 (32)의 저장된 값이 00,032
    INT (5) (32)의 저장 값을 표시한다 (32)
    INT 표시한다 (32)의 저장된 값이 (32)

  • 저장된 값에 x 보다 많은 자릿수 가 있으면 그대로 표시됩니다.

    INT (3) ZEROFILL 보여줄 것이다 250,000의 저장된 값 250,000
    INT (3)을 보여주는 것이다 250,000의 저장된 값 250,000
    INT를 보여줄 것이다 250,000의 저장된 값 250000

데이터베이스에 저장된 실제 값은 영향을받지 않으며 크기는 여전히 동일하며 모든 계산은 정상적으로 작동합니다.

이는 BIGINT, MEDIUMINT, SMALLINT 및 TINYINT에도 적용됩니다.


49
따라서 zerofill을 사용하지 않으면 길이는 절대로 아무것도하지 않습니까?
developerbmw

29
@developerbmw-맞습니다. 길이를 사용하지 않으면 절대 아무 것도하지 않습니다 ZEROFILL.
Rick James

ZEROFILL은 기본적으로 메인 프레임 호환성 모드입니다.
Henk Poley

114

따르면 여기서 , int(11)공간의 32 비트 공간의 4 바이트 걸릴 2^(31) = 2147483648최대 값과 -2147483648최소값을. 1 비트는 부호입니다.


1
귀하의 예는 9 9입니다. 예가 맞는지 확인해 주시겠습니까? 그렇다면 왜 9 9가있을 때 10이라고 말합니까? 자릿수에 1을 더한 부호 문자입니까?
Homer6

5
아니요, 부호없는 int, 즉 2 ^ 32 인 경우 최대 수는 4294967295입니다. 괄호 안의 숫자는 스토리지 유형에 영향을 미치지 않습니다. 2 ^ 32 이상이 필요한 경우 bigint로 이동해야합니다.
Kieran Tully

7
또는 오히려 (2 ^ 32) -1.
Kieran Tully

2
+ 키란이 옳다. 최대 수는 답변의 수와 다릅니다. 여기를
daviewales

38

다른 사람들이 말했듯이 열이 저장할 수있는 최소 / 최대 값과 바이트 단위의 저장 용량은 길이가 아닌 유형에 의해서만 정의됩니다.

이 답변 중 많은 (11)부분 은 부품이 디스플레이 폭에만 영향을 미치며 실제로는 사실이 아니라 대부분입니다.

0으로 채워지지 않은 정의는 다음 int(2)과 같습니다.

  • 여전히 가치를 받아들입니다 100
  • 출력시 의 값을 계속 표시 합니다 100( 0또는 00아님).
  • 표시 폭 선택 쿼리 최대치 존재 출력의 폭이 될 것이다.

zerofill이 지정된 경우 에만 할 것 (2)입니다 .

  • 의 값 1이 표시 01됩니다.
  • 값을 표시 할 때 열은 항상 특정 선택 쿼리에서 열에 표시해야하는 가장 큰 값을 표시하는 데 필요한 최소 너비 대신 열에서 취할 수있는 최대 가능한 값의 너비를 항상 10 자리 정수로 갖습니다. 훨씬 작을 수 있습니다.
  • 컬럼은 여전히 ​​길이를 초과하는 값을 표시 할 수 있지만이 값 앞에는 0이 붙지 않습니다.

모든 뉘앙스를 보는 가장 좋은 방법은 다음을 실행하는 것입니다.

CREATE TABLE `mytable` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `int1` int(10) NOT NULL,
    `int2` int(3) NOT NULL,
    `zf1` int(10) ZEROFILL NOT NULL,
    `zf2` int(3) ZEROFILL NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `mytable` 
(`int1`, `int2`, `zf1`, `zf2`) 
VALUES
(10000, 10000, 10000, 10000),
(100, 100, 100, 100);

select * from mytable;

출력됩니다 :

+----+-------+-------+------------+-------+
| id | int1  | int2  | zf1        | zf2   |
+----+-------+-------+------------+-------+
|  1 | 10000 | 10000 | 0000010000 | 10000 |
|  2 |   100 |   100 | 0000000100 |   100 |
+----+-------+-------+------------+-------+

이 답변은 Linux 용 MySQL 5.7.12에 대해 테스트되었으며 다른 구현에 따라 달라질 수 있습니다.


5
"길이가 더 길어도 int1 컬럼의 표시 너비가 zerofill2보다 훨씬 작은 방법에 주목하십시오."Ehm, 이는 단지 컬럼 이름 'zerofill2'가 9 자 길이에 비해 'int1'이 4 자
이기

2
... 예. 길이가 0으로 설정되어 있지 않은 경우 디스플레이 너비에도 영향을 미치지 않습니다. 그렇지 않으면 int1은 너비가 10 자보다 훨씬 넓습니다.
Programster

2
확실한 예를 가진 좋은 설명. 받아 들여진 것보다 더 나은 답변. @Programster에게 감사합니다.
코린

작은 nit : neokio가 지적했듯이이 쿼리에서 "int (3)"의 정확한 결과는 0으로 채워지지 않습니다. 동작을보다 명확하게하려면 열 이름을 "zf2"로 줄이십시오. 특히, (DB 버전에서) 값을 표시 할 때 열은 항상 열이 취할 수있는 최대 값의 너비를 갖습니다 (정수의 경우 10 자리).
ToolmakerSteve

1
neokio의 의견과 나의 작은 nit 의견을 명확히하려면 : "int1 열이 길이가 더 길더라도 zerofill2보다 표시 너비가 훨씬 작은 방법에 유의 하십시오." 답변에서 제거해야합니다. 이는 헤더 단어 "zerofill2"의 문자 수의 결과입니다. 디스플레이 너비 테스트와는 아무런 관련이 없습니다. 해당 열에 더 짧은 이름을 지정하는 것이 좋습니다 (예 : "zf2"). 그런 다음 "int1, int2 및 zf2는 모두 정확히 동일한 너비이지만 int2 및 zf2는 작은 너비 (3)"를 지정합니다.
ToolmakerSteve

32

mysql에서 int (11)의 열 크기는 바이트 단위입니까?

(11)-이 int데이터 유형 속성 은 열 크기와 관련이 없습니다. 정수 데이터 유형의 표시 너비 일뿐입니다. 11.1.4.5 부터 숫자 형 속성 :

MySQL은 유형의 기본 키워드 다음에 정수 데이터 유형의 표시 너비를 괄호 안에 선택적으로 지정하기위한 확장을 지원합니다. 예를 들어, INT (4)는 표시 너비가 4 자리 인 INT를 지정합니다.


19

이에 대한 좋은 설명은 여기 에서 찾을 수 있습니다

. 요약 : int (N)의 숫자 N은 varchar (N)의 경우와 같이 열에 허용되는 최대 크기와 혼동되는 경우가 많습니다.

그러나 Integer 데이터 유형의 경우 에는 괄호 안의 숫자 N이 열의 최대 크기가 아니라 MySQL을 통해 테이블의 데이터를 볼 때 열을 표시 할 너비를 MySQL에 알려주는 매개 변수 콘솔 (ZEROFILL 속성을 사용하는 경우).

괄호 안의 숫자는 MySQL에게 들어오는 정수를 채우는 0의 수를 알려줍니다. 예를 들어 : INT (5)로 설정된 열에서 ZEROFILL을 사용하고 숫자 78이 삽입되면 MySQL은 숫자가 대괄호 안의 숫자를 충족시킬 때까지 해당 값을 0으로 채 웁니다. 즉, 78은 00078이되고 127은 00127이됩니다. 요약하면 : 괄호 안의 숫자는 표시 목적으로 사용됩니다.
어떤 방식으로, ZEROFILL 속성을 사용하지 않으면 대괄호 안의 숫자는 쓸모가 없습니다.

INT의 크기는 동일 즉 남아있을 것입니다 그래서 -2147483648 서명을 위해 2147483648로 하고 0 4294967295에 서명을 위해(~ 2.15 십억 및 4.2 십억, 개발자가 20 억 줄 이상의 행을 포함하지 않는 한 데이터베이스에 거의 영향을 미치지 않기 때문에 괄호 안의 숫자 N에 관한 이야기를 모르는 이유 중 하나입니다.) 것 4 바이트 .

정수 유형 크기 / 범위에 대한 자세한 내용은 MySQL 매뉴얼을 참조하십시오.


왜 행 수가 여기에서 재생됩니까?
Old Geezer

@OldGeezer- "행 수"는 대부분의 열과 관련이 없습니다. 자동 증분 기본 키 (id) 열에 만 해당됩니다.
ToolmakerSteve

10

이 답변을 볼 수는 없지만 다음 설명이 가치가 있다고 생각합니다.

  • MySQL에서 정수 데이터 유형 뒤의 (n)은 디스플레이 너비를 지정합니다.
  • 표시 너비는 쿼리에서 반환 된 숫자의 길이를 제한하지 않습니다.
  • 디스플레이 너비는 0으로 채워진 열에 채워지는 0의 수를 제한하므로 총 수가 디스플레이 너비와 일치합니다 (실제 숫자가 디스플레이 너비를 초과하지 않는 한 숫자는 그대로 표시됨)
  • 디스플레이 너비는 개발자가 값을 채워야하는 길이를 알 수있는 유용한 도구로도 사용됩니다.

세부 사항 비트
표시 폭은 0으로 채워진 숫자로 표시되는 0의 수에 대한 일부 메타 데이터를 제공하기위한 것입니다.
실제로 해당 숫자가 지정된 표시 너비를 초과하는 경우 쿼리에서 반환되는 숫자의 길이를 제한하지 않습니다.
MySQL에서 정수 데이터 유형에 실제로 허용되는 길이 / 폭을 알려면 목록 및 링크를 참조하십시오. ( 유형 : TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT );
따라서 위 말했다 데, 당신은 디스플레이 폭이 열이 ZEROFILL 컬럼으로 지정하지 않는 한이 표준 쿼리의 결과에 영향이없는 것으로 기대할 수 있습니다
또는
데이터가 응용 프로그램에 들어갔습니다되어 및 해당 응용 프로그램이 수집되는 경우 다른 종류의 패딩에 사용할 너비를 표시합니다.

기본 참조 : https://blogs.oracle.com/jsmyth/entry/what_does_the_11_mean


정답을 제공해 주셔서 감사합니다. 나는 MySQL 커맨드 라인에서 노력하고 있었고 n, 작은 숫자로자를 수는 없었습니다 . 그래서, 그것은 헛소리입니다. 채우기가 0 인 항목 만 수행합니다.
mpen

@mpen 내가 도울 수있어서 기뻤습니다. 이것은 내가 시도한 것과 관련이 있었고 여기에 다른 사람에게 유용 할 수있는 자세한 내용을 넣을 수 있다고 생각했습니다.
MER

9

MySQL에서 정수의 int(11)크기는 4 바이트이며 32 비트와 같습니다.

부호있는 값은 :- 2^(32-1) to 0 to 2^(32-1)-1 = -2147483648 to 0 to 2147483647

부호없는 값은 다음과 같습니다. 0 to 2^32-1 = 0 to 4294967295


0

에 따르면 :

MySQL에서는 INT (11)와 같은 정수 유형에 "폭"을 지정할 수 있습니다. 이는 대부분의 애플리케이션에서 의미가 없습니다. 유효한 값의 범위를 제한하지 않고 단순히 MySQL 대화식 도구가 표시 목적으로 예약 할 문자 수를 지정합니다. 저장 및 계산 목적으로 INT (1)은 INT (20)과 동일합니다.


-4

int (11)의 최대 값은 4294967295라고 생각합니다.


2
부호가 있기 때문에 2147483647입니다.
d3bit

-9

int (11)에 최대 11 자리 IMO가 표시되므로 4294967295가 답입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.