일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 스프링 웹플럭스
- org.json
- 문자형을 날짜형으로
- 스프링 배치 메타 테이블
- ChainedTransactionManager #분산데이터베이스 #Spring Boot #MyBatis
- Meta Table
- JSON 분해
- date_format
- spring webflux
- spring reactive programming
- 성능개선
- jar 소스보기
- 스테이지에 올리기
- JSON 분할
- JSONObject 분할
- git stage
- 마리아디비
- 폐기하기
- nonblocking
- 스프링 리액티브 프로그래밍
- 마이바티스 트랜잭션
- multi update
- JSONArray 분할
- batchInsert
- 날짜형을 문자형으로
- JSON 분리
- 스프링 배치 공식문서
- JobExecutionAlreadyRunningException
- 무시하기
- str_to_date
- Today
- Total
ebson
[MariaDB] innoDB CHARSET 과 COLLATE 의 개념과 종류별 특징 본문
CHARSET 과 COLLATE 의 개념
CHARSET 은 문자의 집합이라면 COLLATE 는 이들 문자 집합을 비교하고 정렬하는 규칙에 관한 것이다. 어떤 규칙에서는 영어 대소문자를 구분하는 반면 다른 규칙에서는 구분하지 않을 수 있다. 어떤 규칙에서는 악센트를 구분할 수도 있고 다른 규칙에서는 구분하지 않을 수 있다. 그리고 어떤 규칙에서는 이모지 문자를 지원하는 반면 어떤 규칙에서는 이모지 문자를 지원하지 않을 수 있다.
한편, MariaDB 에서는 CHARSET은 언제나 COLLATE 이름의 일부이다. 예를 들어, COLLATE 의 일종인 utf8mb4_bin 에서 utf8mb4 는 CHARSET 에 해당한다.
utf8mb4 CHARSET
utf8mb4 는 utf-8 CHARSET 을 확장하고 보완한 CHARSET이다. uft-8 CHARSET 이 3바이트로 모든 문자를 표현해왔으나 이모지 문자 등을 표현하지 못함에 따라, 4바이트로 이들 문자들까지도 표현할 수 있도록 한 것이 utf8mb4 CHARSET 이다.
MariaDB 에서 CHARSET 과 COLLATE 목록 확인하기
MariaDB 에서는 SHOW CHARACTER SET 명령어로 지원하는 CHARSET 을 확인할 수 있고 SHOW COLLATION 명령어로 지원하는 COLLATE 목록을 확인할 수 있다.
SHOW CHARACTER SET -- 지원 CHARSET 목록 조회
SHOW COLLATION -- 지원 COLLATE 목록 조회
COLLATE 이름을 이해하기
COLLATE 이름에 '_ci' 가 포함되면 영어 대소문자를 구분하지 않는다는 의미이다. 반면, '_cs'가 포함되면 영어 대소문자를 구분한다는 의미이다. 그리고 COLLATE 이름에 '_ai' 또는 '_as' 가 포함되면 악센트를 구분하지 않는다는 의미이다.
한편, COLLATE 이름에 nopad 가 포함되면 후행 공백들을 일반 문자와 같이 여기겠다는 의미이다.
또한, COLLATE 이름에 _bin 이 포함되면 binary로 값을 저장하겠다는 것이고 _general 이 포함되면 binary 값보다 더 사람 친화적으로 값을 저장한다는 것이다. 그리고 _unicode 가 포함되면 이를 반번 더 사람 친화적으로 처리한다는 것을 의미한다.
참고로, MySQL 8.0 을 기준으로 COLLATE 들의 조회 성능을 비교한 결과 utf8mb4_bin, utf8mb4_general_ci, utf8mb4_unicode_ci 순서로 성능이 좋았다.
프로젝트의 특성에 맞는 CHARSET 과 COLLATE 을 사용하기
이상의 내용을 숙지한 후에 프로젝트의 특성에 맞게 CHARSET 과 COLLATE 를 설정하는 것이 좋다. 대소문자 구분이 필요한지, 악센트 구분이 필요한지, 이모지 문자열을 사용할 필요가 있는지를 고려할 수 있을 것이다. 또는 이들과 함께 읽기 성능을 고려할 수 있다.
참고로, 테이블 생성시 컬럼과 테이블 수준에서 CHARSET 과 COLLATE 를 설정하는 문법은 아래와 같다.
CREATE TABLE `COLLATE_TEST` (
`COL1` VARCHAR(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
, `COL2` VARCHAR(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
, `COL3` VARCHAR(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
, `COL4` VARCHAR(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_nopad_bin
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
;
참고출처
"Character Set and Collation Overview" , MariaDB 공식문서 , https://mariadb.com/kb/en/character-set-and-collation-overview/.
"Supported Character Sets and Collations" , MariaDB 공식문서 , https://mariadb.com/kb/en/supported-character-sets-and-collations/.
"Setting Character Sets and Collations" , MariaDB 공식문서 , https://mariadb.com/kb/en/setting-character-sets-and-collations/.
"Charset 와 Collation 설정이 MySQL 성능에 미치는 영향" , 또리장군 블로그 , 2021년 3월 1일 수정, 2024년 1월 23일 접속, https://blog.naver.com/parkjy76/222260753535.
'DATABASE STUDY' 카테고리의 다른 글
[신입 SQL 교육 자료] GROUP BY-HAVING, ORDER BY, 윈도우함수, 테이블락, 트랜잭션, 동시성제어 (0) | 2023.05.31 |
---|---|
[신입 SQL 교육 자료] JOIN, SUBQUERY, 계층형쿼리 (0) | 2023.05.30 |
[신입 SQL 교육 자료] KEY, SEQUENCE, INDEX (0) | 2023.05.30 |
[ ORACLE ] INSTR 함수를 사용해 문자열에서 특정 문자 인덱스를 찾고 SUBSTR 함수를 사용해 특정 구분자 사이의 문자열을 추출하기 (0) | 2023.04.06 |
[MariaDB] 날짜형을 문자형으로, 문자형을 날짜형으로 변환하기 (0) | 2023.02.21 |