MySQL 8 의 character set 과 collation 변경 사항
MySQL 8 이 release 되고 드디어 기본 캐릭터 셋이 latin-1 에서 utf8mb4 로 변경되었습니다.
이에 맞게 기본 collation 도 utf8mb4_0900_ai_ci 로 변경되었는데 collation 이름이 너무 어려워서 무슨 의미인지 찾아보니 다음과 같은 뜻이 있다고 합니다.
- uft8mb4 : 각 character 는 최대 4 byte 의 UTF-8 인코딩을 지원(이모지와 특수 문자도 문제 없음)
- 0900 : Unicode 의 collation algorithm 9.0.0 을 지원 (가장 최신의 유니코드 표준).
- ai : accent insensitivity. 그래서 다음 문자들은같은 문자로 취급함(e, è, é, ê and ë)
- ci: case insensitivity. 그래서 p 와 P 를 같은 순서로 취급
collation 은 정렬시외에도 다음의 경우에도 제공되니 주의깊게 설정해야 합니다.
- 정렬시(ORDER BY)
- LIKE 검색
- Index 생성시
- Primary Key 나 Unique constraint 검사시
- =, != 등 비교 연산자
- string 관련 function
Character set 을 변경해야 하는지?
기존 문자 셋이 utf8mb4 가 아니라면 무조건 변경하는 것을 권장합니다.
다국어를 지원하지 않는 서비스라도 Emoji 나 특수 문자를 원활하게 사용하려면 utf8mb4 가 필요합니다.
테이블별로 character set 을 변경하려면 아래 SQL 을 실행하면 됩니다.
table character set 변경
ALTER TABLE foo CONVERT TO CHARACTER SET utf8mb4;
Collation 을 변경해야 하는지?
collation 을 utf8mb4_0900_ai_ci 으로 변경하는 것은 생각보다 쉽지 않은 문제인 것 같습니다. 일반적으로 정렬에만 영향을 준다고 알고 있지만 Index, Primary Key, Unique Constraint 에 영향을 주므로 다개국어 데이타가 있는 큰 데이터베이스는 collation 변경의 영향을 측정하기가 어렵습니다.
예로 아래와 같이 테이블 에 unique constraint 가 있는 컬럼이 있을 경우
table 생성
create table test( id int auto_increment primary key , n varchar(20), u varchar(20) unique );
2번째 insert 구문은 utf8mb4_0900_ai_ci collation 을 사용할 경우 "23000 Duplicate entry" 에러가 발생합니다.
insert into test(n, u) values('n', 'e'); insert into test(n, u) values('n', 'è');
같이 보기
Ref
Related content
MySQL 데이타베이스와 사용자 계정 생성하기
MySQL 데이타베이스와 사용자 계정 생성하기
More like this
MS 엑셀(Excel)에서 UTF-8 로 된 csv 파일 가져오기
MS 엑셀(Excel)에서 UTF-8 로 된 csv 파일 가져오기
More like this
중복된 내용을 제거하는 linux uniq 명령어 사용법
중복된 내용을 제거하는 linux uniq 명령어 사용법
More like this
Guard(fka Atlassian) SEN 정보 확인하기
Guard(fka Atlassian) SEN 정보 확인하기
More like this
What happens when you exceed your user license limit in Confluence/Jira Cloud(라이센스 사용자 제한을 초과한 경우)
What happens when you exceed your user license limit in Confluence/Jira Cloud(라이센스 사용자 제한을 초과한 경우)
More like this