일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 티스토리챌린지
- +9:00
- getEntityGraph
- mysql equal null
- RootGraph
- createEntityGraph
- mysql =
- deserializer
- pooled-lo
- 오블완
- spring boot
- NamedEntityGraph
- mysql not equal null
- Protecle
- EmbeddedId
- @CreateDate
- 버전 문자열 비교
- sendFractionalSeconds
- 운동해서 광명찾자
- getDateCellValue
- apatch poi
- https
- load order
- AuditingEntityListener
- yml
- MYSQL
- 1*1000
- fractional seconds
- @EntityListeners
- MSSQL
- Today
- Total
Hello
[MySQL] Charset과 Collation개념 및 조합 본문
Charset(문자 집합) 문자열 데이터를 어떻게 해석하고 저장할지를 결정하는 규칙
MySQL 5.7 이하는 latin1, MySQL 8은 utf8mb4
Collation은 특정 문자 셋(Character set)에 의해 저장된 값을 비교하기 위해 사용하는 규칙의 집합
해외 프로젝트를 진행중 닉네임 조회 결과가 의도와 다르게 동작하는 이슈가 발생했습니다.ex) 아래 예시들이 구분되어 조회되지않음
영어
닉네임 : abc
닉네임 : ABC
대만어
닉네임 : tong
닉네임 : tóng
베트남어
닉네임 : ma
닉네임 : má
대소문자 및 성조 관련 이슈가 있었는데, 해당 프로젝트는 mysql 8 기본 collation(utf8mb4_0900_ai_ci)을 사용하고 있었습니다. utf8mb4_0900_ai_ci는 위의 예시와 같은 문자를 같은 문자열로 인식하여 처리 하기 때문에 글로벌 서비스인 경우 collation설정을 확인해야합니다.
- utf8mb4 : 각 문자가 UTF-8 인코딩 체계에서 MaxByte 4로 저장된다는것을 의미합니다.
-
0900 : Unicode Collation Algorithm 버전을 나타냅니다. Unicode Collation Algorithm은 유니 코드 표준의 요구 사항을 준수하는 두 개의 유니 코드 문자열을 비교하는 데 사용되는 방법입니다.
-
ai : 악센트를 구분하지 않음을 나타냅니다. ex) 정렬 할 때 e, è, é, ê 및 ë 사이에는 차이가 없습니다
-
ci : 대소문자를 구분하지 않습니다. ex) 정렬 할 때 p와 P 사이에 차이가 없다는 것입니다.
성조 및 대소문자를 구분 하지 않는 문자조합을 사용하고 있어 이를 악센트 감도 및 대소문자 구분정렬이가 가능한 collation으로 변경이 필요했습니다.
규칙을 참고해 악센트, 대소문자를 구분하는 utf8mb4_0900_as_cs로 변경해 이슈 해결되었습니다.
참고 :
https://rastalion.dev/mysql-8-0-1
https://www.percona.com/blog/charset-and-collation-settings-impact-on-mysql-performance/
https://atl.kr/dokuwiki/doku.php/charset_collation_-_utf8_unicode_ci_and_utf8mb4_0900_ai_ci
https://dev.mysql.com/doc/refman/8.4/en/charset-unicode-sets.html
'DB' 카테고리의 다른 글
[MySQL]LEFT JOIN에서 기간 검색과 조인 조건 인덱스 설정 (0) | 2024.12.17 |
---|---|
[MySql] SQLException: Zero date value prohibited (0) | 2024.05.31 |
[MSSQL] order by 정렬 기준의 데이터가 유니크 하지 않을 때 (0) | 2024.05.07 |
[MySQL|Connector/J] 시간대를 포함한 시간데이터 처리 (0) | 2024.02.08 |
[MySQL] not equal 검색 null 제외 (0) | 2023.12.19 |