본문 바로가기

데이터베이스

(MySQL) 데이터 타입

훈수/저작권 관련 지적 환영합니다 - 댓글 또는 audgnssweet@naver.com

 

MySQL 데이터 타입


 

문자형 데이터 타입

 

정말 다양한 종류가 있지만, 큰 줄기 위주로 알아보겠습니다.

 

문자열에 대해서 이해하려면 기본적으로 일반적인 String Binary form, Lob에 대해서 이해해야 합니다.

 

데이터베이스에 문자가 저장될 때는 일반적인 String으로 저장될 수도 있지만 Binary 형태의 이진 데이터로 저장하는 경우도 있습니다. '그냥 문자열을 사용하면 직관적인데 왜 binary형태를 사용하나' 하면 일반적인 문자열로 표현할 수 없는 자료형을 표현할 때도 쓰이기 때문입니다. 예를 들면 이미지, 오디오 같은 멀티미디어 파일은 binary text 형태로 표현되기 때문에 일반적인 문자열로 표현하는 것이 의미가 없을 수 있습니다.

 

또한 Lobtext, 그래픽, 이미지, 비디오 등 구조화되지 않은 대형 데이터를 저장하는 데 사용하는 자료형입니다. 여기에는 CLOB (문자 객체), BLOB(이진 객체) BFILE(OS에 저장되는 binary file의 이름과 위치를 저장) 하는 종류가 있습니다.

 

 

 

 

 

 

 

 

 

 

 

CHARVARCHAR에 대해서 먼저 알아보면, CHAR은 고정길이 문자열로 길이나 형태가 완전히 정해져 있을 때 사용합니다. 예를 들어 주민등록번호 같은 경우 우리나라에서는 반드시 13자리입니다. 이런 데이터를 다룰 때 CHAR을 사용합니다. VARCHAR 같은 경우에는 가변 길이 문자열로 문자열 길이가 고정되어 있지 않을 때 사용합니다. 예를 들어서 게시글의 제목을 DB에 저장해야 한다고 생각하면 모든 게시글이 전부 제목이 제각각이고 길이도 다르기 때문에 VARCHAR로 유연함을 제공합니다.

 

MySQL에서 제공하는 BINARYCHAR과 비슷하게 고정 길이 문자열이지만 차이점은 단순히 이진 데이터로 저장된다는 것뿐입니다. VARBINARY도 마찬가지입니다. 가변 길이 문자열이지만 저장될 때 이진 데이터로 저장됩니다.

 

마지막으로 ENUM형태와 SET이 있습니다. 둘 다 정해진 값을 넣고 싶을 때 사용하는 데이터 타입입니다. 예를 들어서 직원 테이블에 성별이 있다고 가정하면 남자, 여자 외에 다른 값이 들어갔을 때 문제가 생길 것입니다. 그래서 남자, 여자라는 값을 미리 ENUM이나 SET으로 묶어놓아서 그 안에서 선택할 수 있도록 해줍니다.

둘의 차이점은, column에 데이터를 집어넣을 때 ENUM은 묶인 데이터 중 하나만 선택해서 넣을 수 있고 SET은 묶인 데이터라면 몇 개를 선택하든 상관이 없다는 것입니다.

 


숫자형 데이터 타입

 

숫자형 자료형에도 다양한 종류가 있지만, 큰 줄기 위주로 알아보겠습니다.

 

BIT이라는 자료형이 있습니다. 몇 비트인지 1부터 64비트까지 숫자를 지정할 수 있습니다. 비트 단위의 작업이 필요할 때 사용합니다.

BOOLBOOLEAN은 논리 자료형을 숫자로 나타낸 것으로, 0false이고 1true로 취급합니다.

 

INTINTEGER는 가장 익숙한 자료형으로 -21억에서 21억까지 나타내는 것이 가능합니다. INT(size)에서 size는 숫자 범위를 제한하는 것이 아니라 display width를 나타냅니다.

 

실수 형태에는 공통적으로 제공하는 (size, d)의 파라미터들이 있는데 이들이 나타내는 것은 다음과 같습니다. Size는 숫자의 전체 길이 (소수점 기준 앞 뒤 모두 포함)이고 d는 소수점 이후의 길이를 나타냅니다. 두 개의 파라미터로 숫자의 전체 길이와 소수점 뒤 길이를 조절할 수 있는 것입니다.

 

FLOATDOUBLE은 일반적으로 알고 있듯이 부동 소수점을 의미하고 IEEE 표준을 따릅니다.

마지막으로 DEC는 고정소수점을 의미합니다.

 

부동과 고정소수점의 차이는 부동소수점은 컴퓨터에서 실수를 표현해내는 방식의 특성상 오차가 생길 수 있는 연산이 수십만 번 반복된다면 오차가 생길 수 있다는 점입니다. 그래서 column을 실수로 나타내야 하는데 얼마나 사용하든 단 0.0001의 오차도 나면 안 된다.라는 상황이라면 고정소수점이나 문자열을 사용하는 것을 고려해야 한다고 합니다.


Date & Time

 

Date and time은 기본적으로 연, , , , , 초를 나타내는 데이터 타입입니다.

 

DATE는 시간을 제외한 날짜만을 나타내는 data type으로 연, , 일까지의 데이터를 표현합니다.

DATETIMEDATE 자료형에 시간까지 포함된 것입니다. , , , , , 초까지 나타냅니다.

 

TIMESTAMP DATETIME과 비슷하나 표현할 수 있는 연도에 차이가 있습니다. DATETIME1000-01-01부터 9999-12-31까지 표현이 가능한데 DATETIME1970-01-01부터 2038-01-09까지 표현이 가능합니다.

TIME은 말 그대로 시간만을 나타내는 자료형입니다. HH-MM-SS의 형태로 표현됩니다. YEAR도 말 그대로 연도만을 나타내는 자료형입니다. 1901년부터 2155년까지 나타내는 것이 가능합니다.


MySQL의 data type에 대해서 알아보았습니다.

 

참고 출처

https://www.w3schools.com/sql/sql_datatypes.asp

https://coding-factory.tistory.com/416

https://stepping.tistory.com/30

https://codingdog.tistory.com/entry/mysql-decimal-vs-double-%EA%B3%A0%EC%A0%95-%EC%86%8C%EC%88%98%EC%A0%90%EA%B3%BC-%EB%B6%80%EB%8F%99-%EC%86%8C%EC%88%98%EC%A0%90

https://m.blog.naver.com/hanccii/220733159291

'데이터베이스' 카테고리의 다른 글

(MySQL) 와일드카드 기반 like 검색과 예시  (0) 2021.05.12
(MySQL) Index 개념과 종류  (0) 2021.05.12
트랜잭션 ACID  (0) 2021.05.12
모델링 개념  (0) 2021.05.12
MySQL 트랜잭션 개념과 예제  (0) 2021.04.14