최근 문제가 발생했습니다. 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) 사이에는 차이가 없습니다.
일반적으로 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!