개발/SQL

[MySQL] 데이터 형식(정수형, 문자형, 실수형, 날짜형)

하빈H 2022. 9. 19. 23:56

1. 데이터 형식

데이터 형식을 잘 활용하면 데이터베이스를 더 효율적으로 구성할 수 있다.

 

정수형

정수형의 크기와 범위는 다음과 같다.

 

데이터 형식 바이트 수 숫자 범위
TINYINT 1 -128 ~ 127
SMALLINT 2 -32,768 ~ 32,767
INT 3 약 -21억 ~ 21억
BIGINT 4 약 -900경 ~ 900경

 

UNSIGNED 예약어를 사용하면 범위가 0부터 시작되어 양수로 더 넓은 범위의 수를 사용할 수 있다.

예를 들면, TINYINT는 -128 ~ 127까지 표현할 수 있는 데이터 형식인데, UNSIGNED TINYINT의 경우 0 ~ 255까지 사용할 수 있다.

 

문자형

CHAR는 길이가 고정되어있는 문자형으로, CHAR(10) 과 같이 사용할 수 있다.

처음부터 길이가 10으로 고정되어 있으므로 3글자만 저장하면 앞의 3자리를 사용하고 뒤의 7자리는 낭비하게 된다.

 

이와 달리, 가변길이 문자형인 VARCHAR(Variable Character)를 사용하면 저장한 글자수 만큼의 자리수만 사용할 수 있다. 다만 VARCHAR가 CHAR보다 공간은 효율적으로 운영할 수 있지만 성능 면에서는 CHAR를 사용하는 것이 좋다.

 

자릿수를 지정하지 않고 CHAR, VARCHAR로만 쓰면 CHAR(1), VARCHAR(1)과 동일하다.

 

문자형의 최대 자릿수는 아래와 같다.

 

데이터 형식 최대 바이트 수
CHAR 255
VARCHAR 16383
TEXT 65535
LONGTEXT 4294967295
BLOB 65535
LONGBLOB 4294967295

 

숫자 형식의 데이터를 저장하려고 하나 문자형을 사용하는 것이 더 적절한 경우가 있다. 전화번호의 경우 02, 035 등 앞에 '0'이 들어가는 숫자를 저장해야하는데, 숫자형을 사용할 경우 앞의 0은 제거되고 저장된다. 따라서 이런 경우 문자형으로 지정해야한다.

 

실수형

실수형은 소수점이 있는 숫자를 저장할 때 사용한다.

 

데이터 형식 바이트 수 설명
FLOAT 4 소수점 아래 7자리까지 표현
DOUBLE 8 소수점 아래 15자리까지 표현

 

날짜형

날짜형은 날짜 및 시간을 저장할 때 사용한다.

 

데이터 형식 바이트 수 설명
DATE 3 - 날짜만 저장
- YYYY-MM-DD 형식으로 사용
TIME 3 - 시간만 저장
- HH:MM:SS 형식으로 사용
DATETIME 8 - 날짜 및 시간을 저장
- YYYY-MM-DD HH:MM:SS 형식으로 사용

 

2. 데이터 형 변환

형 변환에는 직접 함수를 사용해서 변환하는 명시적 형변환과 별도의 지시 없이 자연스럽게 변환되는 암시적 형변환이 있다.

 

명시적 형변환

데이터 형식을 변환하는 함수는 CAST(), CONVERT() 이며 아래와 같이 사용할 수 있다.

 

CAST 안에 올 수 있는 데이터 형식은 CHAR, SIGNED, UNSIGNED, DATE, TIME, DATETIME 등이 있으며, SIGNED는 부호가 있는 정수, UNSIGNED는 부호가 없는 정수를 의미한다.

CAST(값 AS 데이터 형식(길이))
CONVERT(값, 데이터 형식(길이))

 

예제

아래와 같은 테이블 데이터를 정수형으로 변환하여 보여주고 싶을때에는 아래와 같이 조회하면 된다.

기본 조회 쿼리
CAST를 이용한 조회 쿼리

 

암시적 형변환

 

예제

-- 문자와 문자를 더함 (정수로 자동 변환되어 연산됨)
SELECT '100' + '200'; -- 결과 : 300

-- 정수와 문자를 연결 (정수가 문자로 변환되어 처리)
SELECT CONCAT(100, '200'); -- 결과 : 100200

-- 문자를 숫자로 변환하여 비교 (2test가 2로 변환되어 처리)
SELECT 1 > '2test'; -- 결과 : false(0)

-- 문자를 숫자로 변환하여 비교 (test가 0으로 변환되어 처리)
SELECT 0 = 'test'; -- 결과 : true(1)