MySQL 8 기본 collation 이슈

Database/Mysql & Mariadb / /
728x90

Mysql 기본 설치 시 Server가 가지고 있던 기본 Collationlatin1_swedish_ci 였다.

드디어 8.0에서는 utf8mb4_0900_ai_ci로 변경이 되었다.

 

MySQL Version 5.7

 

show variables like '%collation%';

+----------------------+-------------------+

| Variable_name        | Value             |

+----------------------+-------------------+

| collation_connection | utf8_general_ci   |

| collation_database   | latin1_swedish_ci |

| collation_server     | latin1_swedish_ci |

+----------------------+-------------------+

 

MySQL Version 8.0

 

show variables like '%collation%';

+-------------------------------+--------------------+

| Variable_name                 | Value              |

+-------------------------------+--------------------+

| collation_connection          | utf8mb4_0900_ai_ci |

| collation_database            | utf8mb4_0900_ai_ci |

| collation_server              | utf8mb4_0900_ai_ci |

| default_collation_for_utf8mb4 | utf8mb4_0900_ai_ci |

+-------------------------------+--------------------+

 

위와 같은 차이점을 발견할 수 있는데 각 변수는 다음을 뜻한다.

collation_connection :

연결된 세션 내에서 발생된 문자열의 정렬, 컬럼의 값과 비교할 시 우선 순위 가 밀림

collation_database :

현재 use database의 문자 정렬

collation_server :

mysql 서버 인스턴스가 가진 기본 정렬,
database
생성 시 지정하지 않으면 해당 collation으로 자동 설정됨

default_collation_for_utf8mb4 :

이 버전간 복제 시 사용되는 utf8mb4의 정렬 형태로
8.0
이전 버전에서는 utf8mb4_0900_ai_ci 가 지원되지 않기에 발생되는 문제들로 인한 변수값
설정 가능 값 [utf8mb4_0900_ai_ci, utf8mb4_general_ci]

 

mysql 8.0에서 사용되는 utf8mb4_0900_ai_ci을 설명하자면 다음과 같다.

uft8mb4 : character가 최대 4byte UTF8 인코딩을 지원(이모지 처리 가능)

0900 : Unicode collation algorithm 9.0.0 을 지원

ai : accent insensitivity. 그래서 다음 문자들은같은 문자로 취급함(e, è, é, ê and ë)

ci: case insensitivity. 그래서 p P 를 같은 순서로 취급

 

따라서 해당 Mysql 을 업그레이드를 진행할 시 이슈가 발생되는데 ai 옵션에 따라 다음과 같은 문자에 unique 옵션이 있다면 ‘23000 Duplicate entry’ 를 발생 시키게 된다.

insert into test(n, u) values('n''e');

insert into test(n, u) values('n''è'); 

 

따라서 필요에 따라 Collationutf8mb4_general_ci로 변경하여 마이그레이션을 진행해야 한다.

728x90
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기