MySQL에서 UNSIGNED 및 SIGNED INT를 언제 사용해야합니까?


102

MySQL에서 UNSIGNED 및 SIGNED INT를 언제 사용해야합니까? 사용하는 것이 더 낫거나 이것은 단지 개인적인 선호입니까? 나는 이것을 이렇게 사용하는 것을 보았 기 때문에;

id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT

id INT(11) NOT NULL AUTO_INCREMENT

4
음 PK 메이크업 많이하지 감각
zerkms

답변:


165

UNSIGNED양수 (또는 0) 만 저장합니다. 반면에 signed는 음수를 저장할 수 있습니다 (즉, 음수 부호 가있을 수 있음 ).

다음은 각 INTEGER유형이 저장할 수 있는 값 범위의 표입니다 .

MySQL INTEGER 유형 및 길이
출처 : http://dev.mysql.com/doc/refman/5.6/en/integer-types.html

UNSIGNED범위는에서 0까지 n이고 부호있는 범위는 약에서 -n/2까지 n/2입니다.

이 경우에는 AUTO_INCREMENTID 열이 있으므로 네거티브가 없습니다. 따라서 UNSIGNED. 사용하지 않는 경우 UNSIGNED에 대한 AUTO_INCREMENT열, 최대 가능한 값은 높은 절반이 될 것이다 (그리고 값 범위의 부정적인 절반이되지 않는 갈 것입니다).


16
그러나 이는 표준 SQL 기능이 아닌UNSIGNED MySQL 전용 입니다. 즉,을 사용 하면 향후 다른 RDBMS 로의 마이그레이션이 더 복잡해 지거나 SQLAlchemy와 같은 표준 SQL을 대상으로하는 소프트웨어 라이브러리를 사용할 때 어려움이 발생할 수 있습니다. 이것이 답의 일부가되어야한다고 생각합니다. UNSIGNED
minexew


4

기본적으로를 UNSIGNED사용하면 음수가 필요하지 않음을 명시 적으로 지정하기 때문에 정수에 대해 두 배의 공간을 제공합니다 (보통 저장하는 값은 음수가되지 않기 때문입니다).


1

나는 vipin cp에 동의하지 않습니다 .

사실은 첫 번째 비트가 부호를 나타내는 데 사용된다는 것입니다. 그러나 1 은 음수이고 0 은 양수입니다. 더 많은 음수 값은 다른 방식으로 코딩됩니다 (2의 보수). TINYINT의 예 :

The sign bit
|
1000 0000b = -128d  
...  
1111 1101b = -3d  
1111 1110b = -2d  
1111 1111b = -1d  

0000 0000b = 0d  
0000 0001b = 1d  
0000 0010b = 2d  
...  
0111 1111b = 127d  

1

음의 정수 값의 경우 SIGNED사용되며 음이 아닌 정수 값의 경우 UNSIGNED사용됩니다. 항상 UNSIGNEDid를 PRIMARY KEY로 사용 하는 것이 좋습니다 .


0

나는에 추가하고 싶은 한 가지 signed int인은 default value in mysql, 1 bit표시하는 데 사용됩니다 sign. -1 for negative and 0 for positive. 따라서 애플리케이션이 양수 값만 삽입하는 경우 unsigned를 지정하는 것이 좋습니다.


0

저장할 번호의 유형을 알고 있으면 그에 따라 선택할 수 있습니다. 이 경우에는 절대 음수가 될 수없는 'id'가 있습니다. 따라서 unsigned int를 사용할 수 있습니다. 부호있는 정수 범위 : -n / 2 ~ + n / 2 부호없는 정수 범위 : 0 ~ n 따라서 사용할 수있는 양수 수의 두 배가됩니다. 그에 따라 선택하십시오.


0

음수가 아닌 분, 시간 또는 초 형식으로 (예 :) 값 UNSIGNED을 저장하는 것이 가장 좋은 옵션 이라고 생각합니다 time_duration.resolved_call_time = resolved_time(DateTime)-creation_time(DateTime)

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