MySQL의 문자열(String) 타입 종류
MYSQL에서 문자열 데이터 타입은 '고정 문자열' 타입과 '가변 문자열' 타입이 있다
#고정 문자열 타입
칼럼의 데이터 크기를 선언해주면(ex: CHAR(10)) 만약 그 크기만큼 데이터가 다 차지 않더라도
해당 크기를 고정적으로 유지함 (남는 부분을 null로 채우고 원래 선언된 크기를 유지함)
-> 즉 해당 공간만큼 다 채우지 않는다면 메모리 낭비가 되며,
데이터를 가져올 때 공백을 제거해주기 위해 trim() 메서드를 사용하는 작업이 추가됨.
##고정 문자열인 Data Type
- CHAR (최대 10byte의 크기를 가질 수 있음)
#가변 문자열 타입
칼럼의 데이터 크기를 선언해주고 데이터가 채워졌는데 만약 그 크기만큼 데이터가 다 차지 않으면
할당한 데이터만큼만 fit 하게 메모리가 사용됨
-> 즉 크기를 10만큼 선언해줬더라도 실제로 데이터를 6만큼만 채워 넣으면 6만큼만 메모리가 할당되도록 함
(메모리 낭비가 되지 않음)
## 가변 문자열인 Data Type
- VARCHAR (최대 10byte의 크기) : 가변 일반 문자열에 적합
- NVARCHAR (최대 10byte의 크기) : 가변 유니코드 문자열에 적합
일반 문자 vs 유니코드 문자 차이 비교
- 일반 문자(영어 등)는 1byte가 하나의 문자를 표현
- 유니코드 문자(한국어, 중국어, 일본어 등) 2byte가 하나의 문자를 표현한다. (일반 문자에 비해 2배의 공간 사용)
CHAR, VARCHAR, NVARCHAR 타입 비교
#문자열 타입
- CHAR는 고정 문자열 타입
- VARCHAR, NVARCHAR는 가변 문자열 타입
#사용할 때
- CHAR는 고정적인 크기의 '일반 문자열(영어 등)'을 사용할 때 사용
- VARCHAR는 가변적인 크기의 '일반 문자열(영어 등)'을 사용해주는 경우일 때 (-> 즉 '가변 일반 문자열'일 경우 적합)
- NVARCHAR는 가변적인 크기의 '유니코드 문자열(한국어, 중국어 등 비영어, 다국어 지원 일 때)' 사용일 때 적합
#CHAR와 VARCHAR 비교
같은 문자열 값을 char와 varchar로 저장하고 두 값을 equal()로 비교한다면 false가 나올 수 있다
왜냐하면 char는 데이터 공간이 남아도 그 공간을 공백으로 채우는데
이렇게 되면 비교할 시 'sample' == 'sample '처럼 되게 되기 때문에 false가 나올 수 있는 것이다.
-> 이때 trim()으로 char 쪽의 공백을 제거한 후 비교하면 true가 나올 수 있음
(고정 길이 문자열이 아닌 경우엔 varchar를 쓰는 것이 좋음(대부분 varchar를 씀))
#CHAR의 특징
CHAR(n)
- 고정 길이 데이터 타입(최대 255byte 가능)
- 지정된 길이보다 짧은 데이터가 입력되어 들어갈 시 나머지 공간은 공백(NULL)으로 채워짐
- CHAR(0)은 NULL을 의미하며 NULL 혹은 ''(빈 문자열)만을 가질 수 있음
(참조: https://power-overwhelming.tistory.com/38)
'DBMS > MySQL' 카테고리의 다른 글
[MySQL] 특정 칼럼이 어느 테이블에 존재하고 있는지 알아내는 방법 (0) | 2022.02.23 |
---|