[Lecture Note] MySQL 03. Data Type
이것이 MySQL이다 강의를 참고하여 정리한 글임을 밝힙니다.
숫자형 데이터
숫자형 데이터 중 일부를 정리한 것입니다.
데이터 형식 | 바이트 수 | 숫자 범위 | 설명 |
---|---|---|---|
SMALLINT | 2 | -32768~32767 | 정수 |
INT | 4 | -약 21억~ 약 21억 | 정수 |
BIGINT | 8 | -약900경~900경 | 정수 |
FLOAT | 4 | -3.4E+38~1.17E+38 | 소수점 아래 7자리 |
DECIMAL | (5,17) | -10E+38 + 1 ~ +10e+38 -1 | 전체 자리수(m)과 소숫점 이하 자릿수(d)를 가지는 숫자형 |
특히 INT UNSIGNED로 사용할 경우 음수는 사라지고 대신 양수의 표현 범위가 증가하게 됩니다.
문자형 데이터
데이터 형식 | 바이트 수 | 설명 |
---|---|---|
CHAR | 1~255 | 고정길이 문자형으로 n을 1부터 255까지 지정가능하며 n의 기본값은 1 |
VARCHAR | 1~65535 | 가변길이 문자형으로 n은 65535까지 지정가능 |
LONGTEXT | 1~4294967295 | 최대 4GB의 TEXT 데이터 값 |
LONGBLOB | 1~4294967295 | 최대 4GB의 BLOB 데이터 값 |
CHAR와 VARCHAR의 차이는 다음과 같습니다.
- CHAR의 경우 데이터를 기록하고 남은 공간도 차지합니다. 그렇지만 INSERT, UPDATE에는 더 유연합니다.
- VARCHAR의 경우 남은 공간을 차지하지 않습니다.
특히 문자 디코딩 방식을 설정하는 것은 다음과 같습니다.
- my.ini 혹은 my.cnf파일에 들어갑니다
- 클라이언트의 문자세트는 default-character-set에서 확인가능합니다.
- 서버의 문자 세트는 character-set-server에서 확인가능합니다.
TEXT의 경우 대용량의 글자를 저장하기 위한 형식이며 그 크기에 따라서 다양한 TEXT 타입의 데이터형식이 있습니다.
BLOB의 경우 사진, 동영상, 문서 파일 등의 바이트 단위의 이진 데이터를 저장하는데 사용가능하며 동일하게 크기에 따라서 다양한 데이터 형식이 있습니다.
- 예시 1
INSERT INTO movietbl VALUES (1, '쉰들러 리스트', '스필버그', '리암 니슨', load_file('__path1__'), load_file('__path2__') );
이렇게 하면 파일이 업로드 안되며 그 이유는 2가지 존재합니다.
- 업로드 용량 제한하는 시스템 변수
- 해당 폴더가 보안상 문제 없다는 증명 선행
이를 해결한 다음 진행되어야 합니다.
아래의 코드를 통해 앞선 조건들의 상태를 볼 수 있습니다.
SHOW variables LIKE 'max_allowed_packet'; SHOW variables LIKE 'secure_file_priv';
날짜와 시간 데이터
데이터 형식 | 바이트 수 | 설명 |
---|---|---|
DATE | 3 | YYYY-MM-DD |
DATETIME | 8 | YYYY-MM-HH:MM:SS |
Type casting
명시적 형 변환(explicit conversion)
CAST (expr AS dtype)
CONVERT (expr,dtype)
특히 SELECT 문 안에서 서브 쿼리 형식으로 작동하여 특정 열을 처리(합이나 평균)하고 이름을 바꿀 때에도 사용가능하다.
SELECT CAST(AVG(amount) AS SIGNED INTEGER) AS '평균 구매 개수' ~
암시적 형 변환(implicit conversion)
예시 | 설명 |
---|---|
‘100’ + ‘100’ | 정수로 변환되어 연산 |
CONCAT(‘100’,’100’) | 문자와 문자를 연결 |
CONCAT(100,’100’) | 정수가 문자로 변환되어 처리 |
1>’3ASDF’ | 정수인 3으로 변환되어서 비교 |
0=’ASDFAS | 문자는 0으로 처리 |
댓글남기기