>  기사  >  데이터 베이스  >  mysql에서 int(1)과 int(10)의 차이점은 무엇입니까?

mysql에서 int(1)과 int(10)의 차이점은 무엇입니까?

WBOY
WBOY앞으로
2023-05-26 11:42:581784검색

Confusion

최근 문제가 발생했습니다. user_id 필드를 테이블에 추가해야 하므로 user_id 필드가 매우 클 수 있으므로 mysql 작업 주문 변경 테이블 xxx ADD user_id int(1)을 제출했습니다. 내 SQL 작업 순서를 본 후 리더는 '당신이 설정한 int(1)가 충분하지 않을 것 같습니다'라고 말한 다음 설명을 시작했습니다.

이 문제가 처음 발생한 것은 아닙니다. 이 문제를 겪은 사람들 중 일부는 5년 이상 이 일을 해왔습니다. 내 동료들이 항상 int(10)을 사용하는 것을 보면, int(1)을 사용하면 필드의 상한이 제한된다는 느낌이 듭니다.

데이터가 말합니다

mysql에서 int가 4바이트를 차지한다는 것을 알고 있으므로 unsigned int의 경우 최대값은 2^32-1 = 4294967295이며 이는 거의 40억에 가깝습니다. 이 최대값에 도달했습니까?

CREATE TABLE `user` (
  `id` int(1) unsigned NOT NULL AUTO_INCREMENT,
   PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

id 필드는 unsigned int(1)이므로 최대값을 삽입하여 확인해 보겠습니다.

mysql> INSERT INTO `user` (`id`) VALUES (4294967295);
Query OK, 1 row affected (0.00 sec)

성공한 것을 볼 수 있습니다. 즉, int 뒤의 숫자는 int 자체가 지원하는 크기에 영향을 주지 않는다는 의미입니다. int(1), int(2)...int(10) 사이에는 차이가 없습니다.

Zero padding

일반적으로 int 뒤의 숫자는 zerofill과 함께 사용할 때만 유효합니다. 먼저 예를 살펴보겠습니다.

CREATE TABLE `user` (
  `id` int(4) unsigned zerofill NOT NULL AUTO_INCREMENT,
   PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

먼저 4개의 데이터를 int(4) 뒤에 추가합니다.

mysql> INSERT INTO `user` (`id`) VALUES (1),(10),(100),(1000);
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

4개의 데이터(1, 10, 100, 1000)를 각각 삽입한 후 쿼리해 보겠습니다.

mysql> select * from user;
+------+
| id   |
+------+
| 0001 |
| 0010 |
| 0100 |
| 1000 |
+------+
4 rows in set (0.00 sec)

데이터를 통해 int(4) + zerofill이 0이 있을 때 0을 채우는 현상을 구현하는 것을 알 수 있습니다. 4자리 미만이면 Int(4)만으로는 쓸모가 없습니다.
0001의 경우 기본 저장소는 여전히 1이지만 표시되는 저장소는 0으로 채워집니다.

위 내용은 mysql에서 int(1)과 int(10)의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제