차이점은 크게 “문자셋(utf8 vs utf8mb4)”과 “정렬/비교 규칙(collation)” 두 축으로 보면 됩니다.
1) utf8_general_ci vs utf8mb4_general_ci (핵심 차이)
✅ 문자셋 차이 (가장 중요)
- utf8 (MySQL의 utf8): 실제로는 최대 3바이트(utf8mb3) 까지만 저장합니다. → 이모지(), 일부 확장 한자/특수문자 등 4바이트 문자는 저장 불가(깨지거나 오류).
- utf8mb4: 최대 4바이트 UTF-8을 제대로 지원합니다. → 이모지 포함, 유니코드 전 범위 저장 가능.
즉, utf8mb4_general_ci는 “이모지까지 되는 UTF-8”이고 utf8_general_ci는 “이모지 등 일부 문자가 안 되는 UTF-8(3바이트)” 입니다.
✅ collation(…_general_ci) 의미
general_ci 는 비교/정렬 규칙 중 “일반(간단) 규칙”이라 빠르지만 정확도는 떨어질 수 있어요.
ci = case-insensitive (대소문자 구분 안 함)
2) 그럼 “서버 연결 콜레이션(Server connection collation)”이란?
질문에 나온 건 보통 현재 세션 연결에서 문자열을 비교/정렬할 때 쓰는 기본 규칙입니다. (DB나 테이블 collation과 다를 수 있어요.)
확인은 아래처럼 해보면 정확합니다.
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
3) 뭘 쓰는 게 좋나요? (권장)
4) 주의할 점(마이그레이션 시)
utf8mb4는 문자당 최대 바이트가 늘어서 인덱스 길이 제한에 걸릴 수 있습니다(특히 InnoDB, 오래된 설정). 예: VARCHAR 길이가 큰 컬럼에 인덱스가 있으면 조정 필요할 수 있어요.
원하시면, 지금 DB/테이블/컬럼도 utf8mb4로 통일하고 싶은 건지(마이그레이션 여부), 아니면 “표시만 utf8mb4_general_ci로 나오는 이유”가 궁금한 건지에 맞춰서 점검 쿼리/변경 방법까지 딱 맞게 정리해드릴게요.