MySQL에서 테이블과 컬럼의 문자 집합(CHARACTER SET) 설정하기

LeeYulhee·2023년 11월 7일
0

👉 CHARACTER SET(캐릭터 셋)


  • 캐릭터셋은 문자 데이터를 저장하고 검색할 때 어떤 인코딩이 사용되는지를 정의
  • 데이터베이스, 테이블, 컬럼, 그리고 심지어 연결 수준에서 설정할 수 있음



👉 TABLE과 COLUMN에 설정하는 경우 차이


  • TABLE에 설정하는 경우
    • 테이블의 캐릭터셋은 그 테이블 내에서 생성되는 모든 새로운 컬럼의 기본 캐릭터셋을 정의
    • 테이블을 생성할 때 캐릭터셋을 명시적으로 지정하지 않으면, 데이터베이스 수준에서 정의된 기본 캐릭터셋을 상속 받음
  • COLUMN에 설정하는 경우
    • 컬럼의 캐릭터셋은 그 컬럼에 저장되는 문자 데이터의 인코딩을 정의
    • 컬럼 수준에서 캐릭터셋을 지정할 때, 그 컬럼은 테이블이나 데이터베이스 수준의 설정을 오버라이드함
    • 특정 컬럼에만 특별한 문자 인코딩 요구가 있을 때 유용
      • 대부분의 경우, 전체 데이터베이스의 캐릭터셋을 일관되게 설정하고 필요한 경우에만 특정 테이블이나 컬럼의 캐릭터셋을 변경



👉 CHARACTER SET 설정


  • 데이터베이스 생성 시에 설정
    CREATE DATABASE 데이터베이스 이름
    CHARACTER SET utf8mb4
    COLLATE utf8mb4_unicode_ci;
  • 테이블 생성 시에 설정
    • 테이블에 지정
      CREATE TABLE 테이블 이름 (
        id INT PRIMARY KEY,
        content VARCHAR(255)
      ) CHARACTER SET utf8mb4
      COLLATE utf8mb4_unicode_ci;
    • 특정 컬럼에 지정
      CREATE TABLE 테이블 이름 (
        id INT PRIMARY KEY,
        korean_content VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
        english_content VARCHAR(255)
      );


👉 기존 COLUMN의 CHARACTER SET을 변경할 때는 별도 설정 필요


  • 설명
    • 데이터베이스 또는 TABLE의 기본 캐릭터셋을 변경하더라도 기존 COLUMN의 CHARACTER SET이 자동으로 변경되지는 않음
    • 따라서 기존 데이터의 CHARACTER SET을 변경하려면, 각 COLUMN에 대해 개별적으로 ALTER TABLE 문을 실행해주거나 CONVERT TO를 사용하여야 함
  • 예시
    -- TABLE의 기본 CHARACTER SET 변경 (새 COLUMN에만 영향)
    ALTER TABLE mytable DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    
    -- TABLE 내 기존 COLUMN들의 CHARACTER SET을 변환
    ALTER TABLE mytable CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    
    -- 특정 COLUMN의 CHARACTER SET만 변경
    ALTER TABLE mytable MODIFY mycolumn VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    • CONVERT TO CHARACTER SET는 테이블의 모든 문자열 컬럼(CHAR, VARCHAR, TEXT)을 새 CHARACTER SET으로 변환
      • CONVERT TO는 기존 데이터에 영향을 줄 수 있으므로 백업을 추천



👉 CHARACTER SET UTF-8MB4와 Collation utf8mb4_unicode_ci


  • UTF-8MB4
    • 4바이트 유니코드를 지원하는 UTF-8 인코딩의 버전
    • 전 세계의 거의 모든 문자를 포함하는 다국어 문자 지원을 가능하게 함
    • 이모티콘을 포함한 전체 유니코드 문자 범위를 저장할 수 있도록
  • Collation
    • 문자열의 비교와 정렬을 언어별로 어떻게 수행할 것인지를 결정
  • utf8mb4_unicode_ci
    • 문자열 비교와 정렬을 위한 규칙을 정의하는 콜레이션
    • 유니코드 표준을 기반
    • ci로 끝나는 것은 대소문자 구분 없이 문자열을 비교하고 정렬하겠다는 의미
      • A와 a가 같은 문자로 간주됨
    • ⇒ 대소문자를 구분하지 않고 유니코드 표준에 따라 문자열을 정렬하고 비교할 수 있음
profile
끝없이 성장하고자 하는 백엔드 개발자입니다.

0개의 댓글

관련 채용 정보