mysql collate 종류와 변경 방법
mysql 은 문자열의 저장 방식을 character set 과 collate 로 지정할수가 있다.
# character set
문자저장 인코딩 체계
utf8mb4 4byte 지원 => 이모티콘 가능
utf8mb3 는 불가, 일부 지원안됨
# collate
collate는 비교, 정렬 기준 character set 에 종속적인 부분이 있다.
문자형 타입에만 한정, 날짜형, 숫자형 과는 무관
- collate 종류의 의미
ai (accent insensitive)
ci (case insensitive)
general
bin (binary)
0900 : 버전
- 테이블 collate 변경 방법
1) modify로 개별 컬럼만 변경
ex) ALTER TABLE aaa MODIFY COLUMN colA VARCHAR(255)
CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
2) 테이블 속성만 변경
ex) ALTER TABLE aaa DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
=> 테이블의 속성은 변경되지만 기존 데이터 변경되지 않고, 추가되는 컬럼만 이 속성을 따름.
3) convert
기존 데이터도 변환하여 저장. lock 을 수반. 대량 테이블은 오랜 시간 걸림
4) pt-onlie-schema-change
lock 없이 온라인으로 템프테이블에 데이터 카피후 rename 방식
# collate 변경시 이슈
서로다른 collate 컬럼으로 조인을 걸때 에러가 날수 있다.
collate 의 특징을 알고 처음 설계단계에서 지정 collate 를 표준으로 쓰는 것이 중요.
collate 변경은 결국 인덱스를 재생성 하는 과정.
collate 는 테이블에 지정된 메타데이터일뿐 인덱스는 실제로 저장된형태로 가지고 있어서 재생성 작업이 필요하다. pk가 숫자형, 날짜형 칼럼이고 세컨더리 인덱스도 없다면 시간은 오래걸리지 않는다