programing

MySQL의 유형 : BigInt (20) vs Int (20)

new-time 2020. 5. 9. 17:14
반응형

MySQL의 유형 : BigInt (20) vs Int (20)


나는 그 차이 사이에 무엇을 궁금 해서요

BigInt

,

MediumInt

그리고

Int

... 그들이 더 큰 숫자를 허용 것이 분명한 것 같다된다 그러나 나는

Int(20)

a 또는 a를 만들 수 있으며

BigInt(20)

그것이 반드시 크기에 관한 것은 아니라고 생각할 것입니다.약간의 통찰력은 굉장하고 호기심이 많습니다. 나는 오랫동안

MySQL

사용 하고 유형을 선택할 때 비즈니스 요구를 적용하려고 노력했지만이 측면을 이해하지 못했습니다.


http://dev.mysql.com/doc/refman/8.0/en/numeric-types.html을 참조

하십시오

  • INT

    4 바이트 부호있는 정수입니다.
  • BIGINT

    8 바이트 부호있는 정수입니다.

이들은 각각의 바이트 수에 저장할 수있는 것보다 더 이상 더 적은 값을 허용하지 않습니다. 그것은의 2

32

INT

과의 2

64

값을 의미합니다

BIGINT

.20 년

INT(20)

BIGINT(20)

수단 거의 아무것도. 디스플레이 너비에 대한 힌트입니다. 스토리지와 관련이 없으며 열이 허용하는 값의 범위도 없습니다.실제로는

ZEROFILL

옵션 에만 영향을 미칩니다 .

CREATE TABLE foo ( bar INT(20) ZEROFILL );
INSERT INTO foo (bar) VALUES (1234);
SELECT bar from foo;

+----------------------+
| bar                  |
+----------------------+
| 00000000000000001234 |
+----------------------+

MySQL 사용자가이

INT(20)

크기와 비슷한 크기 제한 을보고 가정하는 것은 일반적인 혼란의 원인입니다

CHAR(20)

. 그렇지 않다.


형식 선언에서 괄호 안의 숫자는

display width

이며 데이터 형식에 저장할 수있는 값 범위와 관련이 없습니다. 선언 할 수 있다고

Int(20)

해서 최대 10 ^ 20까지 값을 저장할 수있는 것은 아닙니다.

[...]이 선택적 표시 너비는 응용 프로그램에서 공백으로 왼쪽 여백하여 열에 지정된 너비보다 작은 정수 값을 표시하는 데 사용할 수 있습니다. ...

표시 너비는 열에 저장할 수있는 값 범위 나 열에 지정된 너비를 초과하는 값에 대해 표시되는 자릿수를 제한하지 않습니다.

예를 들어, SMALLINT (3)으로 지정된 열의 일반적인 SMALLINT 범위는 -32768에서 32767 사이이며 세 문자가 허용하는 범위를 벗어난 값은 세 개 이상의 문자를 사용하여 표시됩니다.

각 MySQL 데이터 유형에 저장할 수있는 최대 값 및 최소값 목록은

여기를

참조 하십시오 .


인용문

:

"BIGINT (20)"사양은 숫자 제한이 아닙니다. 데이터가 표시 될 때 20 자리 미만을 사용하면 0으로 채워집니다. 2 ^ 64는 BIGINT 유형의 하드 한계이며 20 자리 자체를 가지고 있으므로 BIGINT (20)은 10 ^ 20 미만의 모든 항목에 공백이 표시되어 있음을 의미합니다.

내가 아는 한, 범위를 벗어난 값을 삽입하려고 할 때 작은 차이가 있습니다.

예제에서 내가 사용하는 것

401421228216

인,

101110101110110100100011101100010111000

(길이

39

자)
  • INT(20)시스템이 있다면 최소 20 비트를 메모리에 할당하십시오. 그러나보다 큰 값을 삽입하면 값이 (또는 for ) 2^20보다 작은 경우에만 성공적으로 저장됩니다.INT(32) -> 21474836472 * INT(32) -> 4294967295UNSIGNED

예:

mysql> describe `test`;
+-------+------------------+------+-----+---------+-------+
| Field | Type             | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| id    | int(20) unsigned | YES  |     | NULL    |       |
+-------+------------------+------+-----+---------+-------+
1 row in set (0,00 sec)

mysql> INSERT INTO `test` (`id`) VALUES (401421228216);
ERROR 1264 (22003): Out of range value for column 'id' at row 1

mysql> SET sql_mode = '';
Query OK, 0 rows affected, 1 warning (0,00 sec)

mysql> INSERT INTO `test` (`id`) VALUES (401421228216);
Query OK, 1 row affected, 1 warning (0,06 sec)

mysql> SELECT * FROM `test`;
+------------+
| id         |
+------------+
| 4294967295 |
+------------+
1 row in set (0,00 sec)
  • If you have BIGINT(20) for system this means allocate in memory minimum 20 bits. But if you'll insert value that bigger than 2^20, it will be stored successfully, if it's less then BIGINT(64) -> 9223372036854775807 (or 2 * BIGINT(64) -> 18446744073709551615 for UNSIGNED)

Example:

mysql> describe `test`;
+-------+---------------------+------+-----+---------+-------+
| Field | Type                | Null | Key | Default | Extra |
+-------+---------------------+------+-----+---------+-------+
| id    | bigint(20) unsigned | YES  |     | NULL    |       |
+-------+---------------------+------+-----+---------+-------+
1 row in set (0,00 sec)

mysql> INSERT INTO `test` (`id`) VALUES (401421228216);
Query OK, 1 row affected (0,04 sec)

mysql> SELECT * FROM `test`;
+--------------+
| id           |
+--------------+
| 401421228216 |
+--------------+
1 row in set (0,00 sec)

I wanted to add one more point is, if you are storing a really large number like 902054990011312 then one can easily see the difference of INT(20) and BIGINT(20). It is advisable to store in BIGINT.


Let's give an example for int(10) one with zerofill keyword, one not, the table likes that:

create table tb_test_int_type(
    int_10 int(10),
    int_10_with_zf int(10) zerofill,
    unit int unsigned
);

Let's insert some data:

insert into tb_test_int_type(int_10, int_10_with_zf, unit)
values (123456, 123456,3147483647), (123456, 4294967291,3147483647) 
;

Then

select * from tb_test_int_type; 

# int_10, int_10_with_zf, unit
'123456', '0000123456', '3147483647'
'123456', '4294967291', '3147483647'

We can see that

  • with keyword zerofill, num less than 10 will fill 0, but without zerofill it won't

  • Secondly with keyword zerofill, int_10_with_zf becomes unsigned int type, if you insert a minus you will get error Out of range value for column...... But you can insert minus to int_10. Also if you insert 4294967291 to int_10 you will get error Out of range value for column.....

Conclusion:

  1. int(X) without keyword zerofill, is equal to int range -2147483648~2147483647

  2. int(X) with keyword zerofill, the field is equal to unsigned int range 0~4294967295, if num's length is less than X it will fill 0 to the left

참고URL : https://stackoverflow.com/questions/3135804/types-in-mysql-bigint20-vs-int20

반응형