[MySQL] 컬럼 UNSIGNED 선언

qufdl·2024년 6월 12일

분명 빙터파크 프로젝트 DDL 작성할 때 팀원에게 배웠는데, 이후 진행한 프로젝트에서 깜박 잊고 말았다…😥 미래의 나를 위해 다시 블로그를 활성화 하려고 한다.

AUTO_INCREMENT

id BIGINT AUTO_INCREMENT PRIMARY KEY
  • 정수 데이터 타입을 사용한다.
  • 새로운 레코드가 추가될 때마다 1씩 증가하는 값이 자동으로 할당된다.
  • AUTO_INCREMENT 열에 값을 지정하지 않으면 데이터베이스 시스템은 자동으로 다음에 할당될 값을 결정한다.

AUTO_INCREMENT는 기본적으로 1부터 시작하며, 고유한 식별자를 생성하는 데 사용되어 기본키로 자주 사용된다.

이때, 만약 누군가 id 컬럼에 음수 값을 넣으려고 시도하면 어떻게 될까?

정수형 데이터는 기본적으로 SIGNED로 선언되어 부호가 있기 때문에 음수 값이 삽입된다.

기본키는 일반적으로 레코드를 고유하게 식별하기 위한 목적으로 사용되며, 음수 값은 이러한 목적에 부합하지 않다.

UNSIGNED

UNSIGNED로 선언된 컬럼은 부호 비트를 제거해 저장 가능한 양수 범위를 두배로 늘리는 역할을 한다.

아래는 정수형 데이터 타입의 범위이다.

데이터 타입저장 공간signedunsigned
TINYINT1 바이트-128 ~ 1270 ~ 255
SMALLINT2 바이트-32,768 ~ 32,7670 ~ 65,535
MEDIUMINT3 바이트-8,388,608 ~ 8,388,6070 ~ 16,777,215
INT (INTEGER)4 바이트-2,147,483,648 ~ 2,147,483,6470 ~ 4,294,967,295
BIGINT8 바이트-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,8070 ~ 18,446,744,073,709,551,615

정리

데이터 무결성을 보장하고, 메모리 최적화를 위해 음수 범위가 필요하지 않은 정수형 컬럼에는 UNSIGNED를 선언하는 것이 좋다!

id BIGINT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY

SIGNED, UNSIGNED가 익숙해서 다시 생각해보니 C언어에서 사용했었다! 자바에는 따로 UNSIGNED 정수 타입이 존재하지는 않지만, 자바8부터는 Integer.parseUnsignedInt() 메서드를 이용해서 부호 없는 정수 데이터를 다룰 수 있다고 한다.

0개의 댓글