생계/MySQL2025. 11. 13. 11:11
반응형

 
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가 숫자형, 날짜형 칼럼이고 세컨더리 인덱스도 없다면 시간은 오래걸리지 않는다

반응형
Posted by 돌고래트레이너