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

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

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



답변

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 (부호 없음)입니다.


답변

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에도 적용됩니다.


답변

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


답변

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

이 답변 중 많은 (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에 대해 테스트되었으며 다른 구현에 따라 달라질 수 있습니다.


답변

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

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

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


답변

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

. 요약 : 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 매뉴얼을 참조하십시오.


답변

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

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

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

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