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(값, 데이터 형식(길이))
예제
아래와 같은 테이블 데이터를 정수형으로 변환하여 보여주고 싶을때에는 아래와 같이 조회하면 된다.


암시적 형변환
예제
-- 문자와 문자를 더함 (정수로 자동 변환되어 연산됨)
SELECT '100' + '200'; -- 결과 : 300
-- 정수와 문자를 연결 (정수가 문자로 변환되어 처리)
SELECT CONCAT(100, '200'); -- 결과 : 100200
-- 문자를 숫자로 변환하여 비교 (2test가 2로 변환되어 처리)
SELECT 1 > '2test'; -- 결과 : false(0)
-- 문자를 숫자로 변환하여 비교 (test가 0으로 변환되어 처리)
SELECT 0 = 'test'; -- 결과 : true(1)
'개발 > SQL' 카테고리의 다른 글
[MySQL] 뷰(VIEW) (0) | 2022.10.02 |
---|---|
[MySQL] INNER JOIN, OUTER JOIN, CROSS JOIN, SELF JOIN (0) | 2022.09.20 |
[MySQL] AUTO_INCREMENT 사용하기 (0) | 2022.09.19 |
[MySQL] 데이터 조회 (ORDER BY, DISTINCT, GROUP BY, LIMIT) (1) | 2022.09.19 |
[MySQL] 데이터 조회 (LIKE) (0) | 2022.09.19 |