
CHARACTER SET과 COLLATION 차이 완전 정리MySQL을 쓸 때 꼭 한 번은 마주치는 charset과 collation의 개념.
이 둘은 텍스트 데이터를 저장하고 처리하는 데 중요한 역할을 해여.
| 항목 | 설명 |
|---|---|
CHARACTER SET | 텍스트를 어떻게 저장할지 (인코딩 방식) |
COLLATION | 텍스트를 어떻게 비교/정렬할지 (정렬 규칙) |
utf8, latin1, ascii, utf8mb4| 이름 | 설명 |
|---|---|
utf8 | 최대 3바이트 인코딩, 대부분 언어 지원 (단, 일부 이모지 저장 불가) |
utf8mb4 | 최대 4바이트 인코딩, 모든 유니코드 문자 지원 (이모지 포함) |
latin1 | ISO-8859-1, 서유럽 언어 전용 (1바이트) |
ascii | 7비트 ASCII, 영어만 표현 가능 (1바이트) |
| 항목 | UTF-8 | UTF-8mb4 |
|---|---|---|
| 최대 바이트 | 3바이트 | 4바이트 |
| 이모지 지원 | ❌ 불가 | ✅ 가능 |
| 추천 용도 | 간단한 영어/한글 | 모든 유니코드 문자, 이모지 포함 |
💡 MySQL의
utf8은 표준 UTF-8과 다르다!
실제로는 최대 3바이트만 지원해이모지,일부 한자등을 저장 못더라구요.
→ 그래서 보통은utf8mb4를 써야 안전!
| 이름 | 설명 |
|---|---|
utf8_general_ci | 대소문자 구분 ❌, 빠른 일반적 비교 (ci: case-insensitive) |
utf8_bin | 대소문자 구분 ✅, 이진 비교 (ASCII 코드값 비교) |
utf8_unicode_ci | 대소문자 구분 ❌, 유니코드 표준을 따름 (언어별 정렬 정확도 ↑) |
🔁
ci= Case Insensitive,cs= Case Sensitive,bin= Binary
utf8mb4 사용utf8mb4_general_ciutf8mb4_bin 추천CREATE DATABASE mydb
CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;
ALTER TABLE users
MODIFY COLUMN nickname VARCHAR(50)
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
처음에는 단순히 문자 인코딩 차이겠지 생각했지만,
실제로는 데이터 저장의 안전성과 검색/비교 정확도에 큰 영향을 준다는 걸 알게 됐다...
특히 이모지나 다국어를 지원하는 서비스에서는
utf8mb4 + 적절한 collation이 필수라는 걸 깨달았다!