giip
SES 안건 등록
Aurora MySQL文字セット移行インデックスパラメータバージョン互換性

Aurora MySQL에서 utf8mb3에서 utf8mb4로 마이그레이션할 때 확인할 사항

公開日 2026-08-13 · 更新日 2026-08-13 · 最終検証日 2026-08-13

結論

utf8mb3(MySQL 5.7에서는 `utf8`이 이 별칭)에서 utf8mb4로 마이그레이션할 때는 (1) 인덱스 키 길이 상한, (2) 콜레이션 선택, (3) 서버 파라미터와 접속 시 문자 집합, 이 세 가지를 먼저 확인합니다. 특히 문제가 되는 것은 키 길이로, utf8mb4는 1글자 최대 4바이트이므로 `VARCHAR(255)` 단독 인덱스는 1020바이트를 요구하며, 767바이트 상한 환경에서는 `ALTER TABLE`이 실패합니다. 변환은 테이블 재생성을 수반하므로 계획 작업으로 처리하십시오.

この文書の適用条件

対象製品Aurora MySQL(MySQL 호환 에디션) / MySQL
確認バージョンAurora MySQL 2.x(MySQL 5.7 호환) / 3.x(MySQL 8.0 호환). `utf8mb4_0900_ai_ci`는 MySQL 8.0 호환인 3.x에서만 사용 가능
適用環境Amazon Aurora, Amazon RDS for MySQL, 온프레미스 MySQL
必要権限조사는 `information_schema` 조회 권한. 변환은 대상 테이블에 대한 `ALTER` 권한, 파라미터 변경은 IAM의 `rds:ModifyDBClusterParameterGroup` 등
実行影響조사 SQL은 영향 없음. `CONVERT TO CHARACTER SET`은 테이블 재생성(데이터 복사)을 수반함
再起動테이블 변환은 불필요. 서버 파라미터 적용 방식은 파라미터마다 다르므로 `ApplyType` 확인 필요
最終検証日2026-08-13

そのまま実行できるコマンド

서버 쪽 문자 집합·콜레이션 현재 값 확인하기参照のみ
対象
Aurora MySQL 2.x / 3.x, MySQL 5.7 / 8.0
権限
접속 권한(전역 변수 조회)
変更作業
없음(조회만)
Production実行
가능
-- 対象: Aurora MySQL 2.x / 3.x、MySQL 5.7 / 8.0
-- 権限: 接続権限(グローバル変数の参照のみ)
-- 変更作業: なし(参照のみ)
-- Production 実行: 可能
SHOW GLOBAL VARIABLES WHERE Variable_name IN (
    'character_set_server',
    'character_set_database',
    'character_set_client',
    'character_set_connection',
    'character_set_results',
    'collation_server',
    'collation_database',
    'collation_connection'
);

MySQL 5.7에서 `utf8`은 `utf8mb3`의 별칭입니다. 여기에 `utf8`로 표시되더라도 실체는 3바이트 상한의 utf8mb3라는 점을 이해하십시오. MySQL 8.0에서는 `utf8`을 별칭으로 사용하는 것이 비권장(deprecated)됩니다.

utf8mb4가 아닌 테이블 찾아내기参照のみ
対象
Aurora MySQL 2.x / 3.x, MySQL 5.7 / 8.0
権限
`information_schema` 조회 권한(메타데이터 가시성 규칙을 따름)
変更作業
없음(조회만)
Production実行
가능
-- 対象: Aurora MySQL 2.x / 3.x、MySQL 5.7 / 8.0
-- 権限: information_schema の参照権限
-- 変更作業: なし(参照のみ)
-- Production 実行: 可能
SELECT
    TABLE_SCHEMA,
    TABLE_NAME,
    ENGINE,
    ROW_FORMAT,
    TABLE_COLLATION,
    ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 1) AS size_mb
FROM information_schema.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
  AND TABLE_SCHEMA NOT IN ('mysql', 'information_schema', 'performance_schema', 'sys')
  AND (TABLE_COLLATION IS NULL OR TABLE_COLLATION NOT LIKE 'utf8mb4%')
ORDER BY (DATA_LENGTH + INDEX_LENGTH) DESC;

`size_mb`가 큰 순서로 정렬되어 있습니다. 변환은 테이블 단위의 데이터 복사가 되므로, 이 순서가 그대로 작업의 부담 순서가 됩니다.

utf8mb4가 아닌 열 찾아내기参照のみ
対象
Aurora MySQL 2.x / 3.x, MySQL 5.7 / 8.0
権限
`information_schema` 조회 권한
変更作業
없음(조회만)
Production実行
가능
-- 対象: Aurora MySQL 2.x / 3.x、MySQL 5.7 / 8.0
-- 権限: information_schema の参照権限
-- 変更作業: なし(参照のみ)
-- Production 実行: 可能
SELECT
    TABLE_SCHEMA,
    TABLE_NAME,
    COLUMN_NAME,
    DATA_TYPE,
    CHARACTER_MAXIMUM_LENGTH AS max_chars,
    CHARACTER_OCTET_LENGTH   AS max_bytes,
    CHARACTER_SET_NAME,
    COLLATION_NAME
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA NOT IN ('mysql', 'information_schema', 'performance_schema', 'sys')
  AND CHARACTER_SET_NAME IS NOT NULL
  AND CHARACTER_SET_NAME <> 'utf8mb4'
ORDER BY TABLE_SCHEMA, TABLE_NAME, ORDINAL_POSITION;

테이블 기본값이 utf8mb4여도 개별 열에 명시적인 문자 집합이 남아 있는 경우가 있습니다. 테이블 단위 확인만으로는 놓칠 수 있으므로 열 단위로도 반드시 확인하십시오.

utf8mb4화로 키 길이 상한을 초과하는 인덱스 사전 확인하기参照のみ
対象
Aurora MySQL 2.x / 3.x, MySQL 5.7 / 8.0(InnoDB)
権限
`information_schema` 조회 권한
変更作業
없음(조회만)
Production実行
가능
-- 対象: Aurora MySQL 2.x / 3.x、MySQL 5.7 / 8.0(InnoDB)
-- 権限: information_schema の参照権限
-- 変更作業: なし(参照のみ)
-- Production 実行: 可能
-- utf8mb4 は 1 文字最大 4 バイト。プレフィックス長指定の無い文字列列だけを対象に、
-- 変換後に必要となるキー長(バイト)を見積もる。
SELECT
    s.TABLE_SCHEMA,
    s.TABLE_NAME,
    s.INDEX_NAME,
    GROUP_CONCAT(s.COLUMN_NAME ORDER BY s.SEQ_IN_INDEX)  AS index_columns,
    SUM(c.CHARACTER_MAXIMUM_LENGTH * 4)                  AS bytes_after_utf8mb4
FROM information_schema.STATISTICS s
JOIN information_schema.COLUMNS c
      ON  c.TABLE_SCHEMA = s.TABLE_SCHEMA
      AND c.TABLE_NAME   = s.TABLE_NAME
      AND c.COLUMN_NAME  = s.COLUMN_NAME
WHERE s.TABLE_SCHEMA NOT IN ('mysql', 'information_schema', 'performance_schema', 'sys')
  AND c.CHARACTER_MAXIMUM_LENGTH IS NOT NULL
  AND s.SUB_PART IS NULL
GROUP BY s.TABLE_SCHEMA, s.TABLE_NAME, s.INDEX_NAME
HAVING bytes_after_utf8mb4 > 767
ORDER BY bytes_after_utf8mb4 DESC;

먼저 767바이트 초과를 전부 추출한 뒤, 자신의 환경의 상한에 맞춰 판정합니다. 행 포맷이 `DYNAMIC` 또는 `COMPRESSED`이고 3072바이트 상한이 적용되는 환경에서는 `HAVING` 기준값을 3072로 바꿔 좁히십시오. `VARCHAR(255)` 단독 인덱스는 255 × 4 = 1020바이트가 되어 767바이트 상한 환경에서는 반드시 실패합니다.

테이블을 utf8mb4로 변환하기(테이블 재생성 수반)
対象
Aurora MySQL 2.x / 3.x, MySQL 5.7 / 8.0
権限
대상 테이블에 대한 `ALTER` 권한
変更作業
있음(테이블 재생성과 데이터 복사)
Production実行
큰 테이블에서는 불가. 계획 작업으로 실시
-- 対象: Aurora MySQL 2.x / 3.x、MySQL 5.7 / 8.0
-- 権限: 対象テーブルへの ALTER 権限
-- 変更作業: あり(テーブル作り直し + 全行のデータコピー)
-- Production 実行: 大きなテーブルでは不可。所要時間を実測してから計画実行する

-- 1) 変換前に現在の定義を保存しておく(切り戻し判断の材料になる)
SHOW CREATE TABLE SampleDB.sample_table;

-- 2) テーブル既定と全文字列列をまとめて変換する
ALTER TABLE SampleDB.sample_table
    CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
    ALGORITHM = COPY,
    LOCK = SHARED;

-- 3) 変換結果を確認する
SELECT COLUMN_NAME, CHARACTER_SET_NAME, COLLATION_NAME
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'SampleDB'
  AND TABLE_NAME   = 'sample_table'
  AND CHARACTER_SET_NAME IS NOT NULL;

`CONVERT TO CHARACTER SET`은 테이블을 재생성하므로 온라인 DDL(`ALGORITHM=INPLACE`)로는 실행할 수 없습니다. `LOCK=SHARED`는 조회는 허용하고 쓰기를 막습니다. 쓰기를 막을 수 없는 큰 테이블에서는 `pt-online-schema-change`나 `gh-ost` 같은 온라인 스키마 변경 도구를 사용하는 방법이 있습니다. 소요 시간은 테이블 크기, 인스턴스 클래스, 동시 부하에 따라 크게 달라지므로 반드시 운영과 동등한 데이터로 실측하십시오(본 문서에서는 소요 시간의 기준을 제시하지 않습니다).

접속 쪽 문자 집합 맞추기
対象
Aurora MySQL 2.x / 3.x, MySQL 5.7 / 8.0(세션 단위)
権限
접속 권한
変更作業
있음(현재 세션의 문자 집합 설정만)
Production実行
가능(세션 내에서 끝남)
-- 対象: Aurora MySQL 2.x / 3.x、MySQL 5.7 / 8.0(セッション単位の設定)
-- 権限: 接続権限
-- 変更作業: あり(現在のセッションのみ。他セッションには影響しない)
-- Production 実行: 可能

-- クライアント・接続・結果の3つの文字セットをまとめて切り替える
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 現在のセッションの値を確認する
SHOW SESSION VARIABLES WHERE Variable_name IN (
    'character_set_client',
    'character_set_connection',
    'character_set_results',
    'collation_connection'
);

테이블을 utf8mb4로 바꾸어도 접속이 utf8mb3인 채로 있으면 4바이트 문자는 저장 시 손실되거나 오류가 발생합니다. JDBC·PDO·각 언어의 드라이버에도 접속 문자 집합 설정이 있으므로 애플리케이션 쪽 접속 문자열도 함께 확인하십시오.

서버 파라미터를 utf8mb4로 변경하기
対象
Aurora MySQL(DB 클러스터 파라미터 그룹)
権限
IAM: `rds:DescribeDBClusterParameters`, `rds:ModifyDBClusterParameterGroup`
変更作業
있음(클러스터 전체에 영향을 주는 파라미터 변경)
Production実行
변경 관리 절차를 거친 후 실시. 적용 방식은 파라미터마다 확인
# 対象: Aurora MySQL(DBクラスターパラメータグループ)
# 権限: IAM rds:DescribeDBClusterParameters, rds:ModifyDBClusterParameterGroup
# 変更作業: あり(クラスター全体に効くパラメータ変更)
# Production 実行: 変更管理を通したうえで実施

# 1) まず現在値と反映方法(ApplyType)を確認する。static なら再起動が必要になる
aws rds describe-db-cluster-parameters \
  --db-cluster-parameter-group-name example-aurora-mysql-cluster-params \
  --query "Parameters[?starts_with(ParameterName, 'character_set') || starts_with(ParameterName, 'collation')].{Name:ParameterName,Value:ParameterValue,Apply:ApplyType}" \
  --output table

# 2) 既定の文字セットと照合順序を変更する
aws rds modify-db-cluster-parameter-group \
  --db-cluster-parameter-group-name example-aurora-mysql-cluster-params \
  --parameters '[
    {"ParameterName":"character_set_server","ParameterValue":"utf8mb4","ApplyMethod":"pending-reboot"},
    {"ParameterName":"collation_server","ParameterValue":"utf8mb4_unicode_ci","ApplyMethod":"pending-reboot"}
  ]'

서버 파라미터 변경은 "앞으로 생성될 객체의 기본값"과 "명시적으로 지정하지 않은 접속의 기본값"에만 영향을 주며, 기존 테이블의 문자 집합은 바뀌지 않습니다. 기존 데이터의 변환에는 `ALTER TABLE`이 필요합니다. `ApplyMethod`는 위 1)에서 확인한 `ApplyType`에 맞추십시오(`static` 파라미터에 `immediate`를 지정하면 오류가 발생합니다).

結果の読み方

意味確認するポイント
TABLE_SCHEMA / TABLE_NAME대상 스키마와 테이블애플리케이션이 실제로 사용하는 스키마로 좁혀졌는지
INDEX_NAME인덱스명기본 키인지 2차 인덱스인지에 따라 대응 선택지가 달라짐
index_columns인덱스 구성 열복합 인덱스는 전체 열의 바이트 길이 합계가 상한에 걸림
bytes_after_utf8mb4utf8mb4화 후 필요한 키 길이 추정치(바이트)767을 초과하면 구 설정 환경에서 실패. 3072를 초과하면 어떤 설정에서도 실패
ROW_FORMATInnoDB의 행 포맷`DYNAMIC` / `COMPRESSED`인지에 따라 키 길이 상한 판정이 달라짐
TABLE_COLLATION테이블 기본 콜레이션utf8mb4 계열인지 여부. 열 단위 설정도 별도로 확인
CHARACTER_OCTET_LENGTH현재 문자 집합에서의 최대 바이트 수utf8mb3에서는 3배, utf8mb4에서는 4배가 됨. 행 크기 상한 추정에 사용
size_mb데이터+인덱스의 대략적인 크기변환 작업 부담의 순서. 큰 것일수록 사전 실측이 필요

こういう状況で使います

  • 이모지나 일부 한자를 저장하면 `Incorrect string value` 오류가 발생함
  • 저장은 되지만 이모지가 `????`나 빈 문자열로 바뀌어 돌아옴
  • `ALTER TABLE ... CONVERT TO CHARACTER SET utf8mb4`가 `Specified key was too long`으로 실패함
  • 테이블은 utf8mb4로 바꿨는데 애플리케이션에서는 여전히 문자가 깨짐
  • 같은 문자열의 비교 결과가 변환 전후로 바뀜(중복 오류가 늘거나 줄어듦)

考えられる原因(可能性の高い順)

  1. 01

    utf8(utf8mb3)는 3바이트까지만 저장 가능함

    MySQL 5.7의 `utf8`은 `utf8mb3`의 별칭으로, 1글자당 최대 3바이트입니다. 이모지나 일부 CJK 확장 한자는 4바이트가 필요해 저장할 수 없습니다.

  2. 02

    인덱스의 키 길이 상한에 걸림

    InnoDB 인덱스 키에는 상한이 있으며, 기존 설정(`innodb_large_prefix` 비활성화, `COMPACT` / `REDUNDANT` 행 포맷)에서는 767바이트, `DYNAMIC` / `COMPRESSED`에서는 3072바이트입니다. utf8mb4는 1글자를 4바이트로 계산하므로 `VARCHAR(255)` 단독 인덱스가 1020바이트를 요구해 767바이트 상한에서는 실패합니다.

  3. 03

    접속 쪽 문자 집합이 맞지 않음

    테이블이 utf8mb4여도 접속이 utf8mb3라면 4바이트 문자는 서버에 도달하기 전에 손실됩니다. 드라이버의 접속 문자열이나 `SET NAMES` 지정을 확인하십시오.

  4. 04

    열 단위 지정이 남아 있음

    테이블 기본값을 바꿔도 열에 명시적인 문자 집합이 지정되어 있으면 그 열은 바뀌지 않습니다. 열 단위 확인이 필요합니다.

  5. 05

    콜레이션 차이로 비교 결과가 바뀜

    `utf8mb4_general_ci`와 `utf8mb4_unicode_ci`는 동등하다고 간주하는 문자의 범위가 다릅니다. 콜레이션을 바꾸면 고유 제약에 걸리는 행의 집합이 바뀔 수 있습니다.

確認手順

  1. 1

    서버·데이터베이스·테이블·열의 4단계로 현재 값 확인하기

    参照のみ

    상위 설정은 기본값일 뿐이며, 하위에 명시적인 지정이 있으면 그쪽이 우선합니다. 4단계 전부를 조회 전용 SQL로 확인합니다.

  2. 2

    utf8mb4가 아닌 테이블·열 목록화하기

    参照のみ

    `information_schema.TABLES`와 `information_schema.COLUMNS`로 대상을 확정합니다.

  3. 3

    키 길이 상한에 걸리는 인덱스 찾아내기

    参照のみ

    변환을 실행하기 전에 반드시 수행합니다. 여기서 나온 테이블은 변환 전에 인덱스 정의 재검토가 필요합니다.

  4. 4

    행 포맷과 `innodb_large_prefix` 상태 확인하기

    参照のみ

    MySQL 5.7 호환 환경에서는 `SELECT @@global.innodb_large_prefix, @@global.innodb_default_row_format;`으로 확인합니다. MySQL 8.0에서는 `innodb_large_prefix`가 제거되었습니다.

  5. 5

    검증 환경에서 테이블 1개를 변환해 소요 시간과 결과 측정하기

    운영과 동등한 데이터량으로 실측합니다. 여기서 얻은 시간이 유일한 계획 근거가 됩니다.

  6. 6

    콜레이션 변경에 따른 비교 결과 차이 확인하기

    고유 제약이 있는 열에서 변환 후 중복이 발생하지 않는지 검증 환경에서 확인합니다.

対応方法

すぐに実施できる低リスクの対応

  • 접속 쪽을 utf8mb4로 맞추기

    애플리케이션의 접속 문자 집합을 `utf8mb4`로 설정합니다. 테이블 변환보다 먼저 이를 끝내두면 변환 직후부터 올바르게 처리할 수 있습니다.

  • 대상과 규모 확정하기

    参照のみ

    찾아내기 SQL의 결과를 작업 목록으로 만듭니다. 테이블 수와 크기를 알기 전까지는 일정을 정할 수 없습니다.

事前検討が必要な変更

  • 키 길이 초과 인덱스를 먼저 처리하기

    열 길이를 줄이기(`VARCHAR(255)` → `VARCHAR(191)` 등), 프리픽스 길이 지정, 인덱스 자체 재검토 중 하나를 선택합니다. 모두 스키마 변경입니다.

  • 행 포맷을 `DYNAMIC`으로 통일하기

    3072바이트 상한을 사용할 수 있게 합니다. MySQL 5.7 호환 환경에서는 `innodb_large_prefix` 활성화와 함께 확인이 필요합니다. 테이블 재생성을 수반합니다.

  • 콜레이션을 정하여 전체 테이블에 통일하기

    테이블마다 콜레이션이 다르면 조인 시 콜레이션 불일치 오류가 발생합니다. 마이그레이션 시 통일하십시오.

再起動・サービス影響を伴う変更

  • `ALTER TABLE ... CONVERT TO CHARACTER SET utf8mb4` 실행하기

    테이블을 재생성하므로 큰 테이블에서는 오랜 시간이 걸리며 그 동안 쓰기가 중단됩니다. 소요 시간은 실측값을 바탕으로 계획하십시오.

  • 온라인 스키마 변경 도구로 변환하기

    `pt-online-schema-change`나 `gh-ost`를 사용하면 쓰기를 중단하지 않고 변환할 수 있지만, 복사용 테이블만큼 스토리지를 소비하며 레플리케이션이나 트리거와의 상호작용을 사전에 검증해야 합니다.

  • 새 클러스터로 재로드하여 전환하기

    専門家レビュー必須

    테이블 수가 많은 경우, utf8mb4로 만든 새 환경에 데이터를 다시 넣고 전환하는 것이 더 확실할 수 있습니다. 전환 계획은 마이그레이션 계획 문서를 참조하십시오.

!注意事項

  • `CONVERT TO CHARACTER SET`은 테이블을 재생성합니다. 테이블 크기에 비례한 시간과 스토리지, 그리고 쓰기 중단이 필요합니다. 무중단으로 끝나는 작업이 아닙니다.
  • 변환으로 열의 최대 바이트 수가 늘어나므로 행 크기나 인덱스 키 길이 상한에 새롭게 걸릴 수 있습니다. 사전 확인 없이 실행하지 마십시오.
  • 콜레이션을 바꾸면 문자열 비교·정렬 결과가 바뀝니다. 고유 제약이 있는 열에서는 변환 후 중복 오류가 발생할 수 있습니다.
  • 서버 파라미터 변경만으로는 기존 테이블이 바뀌지 않습니다. 반대로 테이블만 바꿔도 접속 쪽이 utf8mb3이면 문자가 손실됩니다. 양쪽 모두 맞추십시오.
  • 4바이트 문자를 포함한 데이터를 이미 utf8mb3 열에 넣으려다 실패한 경우, 손실된 데이터는 변환으로 복구되지 않습니다. 먼저 애플리케이션 쪽 오류 로그를 확인하십시오.
  • 소요 시간의 기준은 본 문서에서 제시하지 않습니다. 테이블 크기·인스턴스 클래스·동시 부하에 따라 크게 달라지므로 반드시 검증 환경에서 실측한 값을 사용하십시오.

バージョン・環境による違い

MySQL 5.7 호환(Aurora MySQL 2.x)`utf8`은 `utf8mb3`의 별칭입니다. `innodb_large_prefix`와 `innodb_default_row_format`의 조합에 따라 키 길이 상한이 767바이트가 되는 경우가 있습니다.
MySQL 8.0 호환(Aurora MySQL 3.x)`innodb_large_prefix`는 제거되었고 기본 행 포맷은 `DYNAMIC`입니다. `utf8`을 문자 집합명으로 사용하는 것은 비권장 처리됩니다. `utf8mb4_0900_ai_ci`는 MySQL 8.0 계열에서 추가된 콜레이션으로 5.7 호환 환경에서는 사용할 수 없습니다.
콜레이션 선택 방법`utf8mb4_general_ci`는 비교 규칙이 단순하고, `utf8mb4_unicode_ci`는 유니코드 콜레이션 규칙에 따른 비교를 수행합니다. `utf8mb4_0900_ai_ci`는 MySQL 8.0의 기본값입니다. 어느 것을 선택하느냐에 따라 비교 결과가 달라지므로 기존 데이터로 중복 판정을 검증한 뒤 결정하십시오.

これで解決しない場合に確認すること

  • 애플리케이션의 드라이버 설정 확인하기

    JDBC의 `characterEncoding`, PHP의 `charset`, 각 언어 클라이언트 라이브러리의 기본값이 `utf8mb4`로 되어 있는지 확인합니다.

  • 조인하는 테이블 간 콜레이션이 맞는지 확인하기

    콜레이션이 다른 열을 조인하면 실행 시 오류나 인덱스 미사용의 원인이 됩니다.

  • 저장 프로시저·뷰·트리거의 문자 집합 확인하기

    루틴은 생성 시점의 문자 집합을 유지합니다. 테이블 변환 후 재생성이 필요한 경우가 있습니다.

  • 레플리카나 DMS 타겟도 동시에 변환되는지 확인하기

    소스만 변환하면 레플리케이션 대상에서 불일치나 적용 오류가 발생합니다.

  • 백업 복원 절차에서 문자 집합이 유지되는지 확인하기

    롤백 시 변환 전 정의로 되돌릴 수 있는지 사전에 확인하십시오.

この文書の根拠と限界

製品の公式ドキュメントに基づく説明

MySQL의 문자 집합·콜레이션(`utf8mb3` / `utf8mb4`, `utf8mb4_general_ci` / `utf8mb4_unicode_ci` / `utf8mb4_0900_ai_ci`), InnoDB의 인덱스 키 길이 상한과 행 포맷, `ALTER TABLE ... CONVERT TO CHARACTER SET`의 공개 사양, 그리고 Amazon Aurora의 클러스터 파라미터 그룹 공개 사양에 기반합니다. 변환 소요 시간은 환경에 따라 다르므로 기재하지 않았습니다.

よくある質問

utf8과 utf8mb4는 무엇이 다릅니까?

MySQL 5.7에서 `utf8`은 `utf8mb3`의 별칭으로, 1글자당 최대 3바이트까지만 저장할 수 있습니다. 이모지나 일부 CJK 확장 한자는 4바이트가 필요하므로 `utf8mb4`가 아니면 저장할 수 없습니다. MySQL 8.0에서는 `utf8`을 별칭으로 사용하는 것이 비권장됩니다.

Production에서 실행할 수 있습니까?

찾아내기용 SQL은 모두 조회 전용이므로 운영 환경에서 실행할 수 있습니다. `ALTER TABLE ... CONVERT TO CHARACTER SET`은 테이블 재생성을 수반하며 그 동안 쓰기가 중단되므로, 규모에 따라 계획된 정지 또는 온라인 스키마 변경 도구를 사용하십시오.

ALTER TABLE이 "키가 너무 길다"며 실패하는 이유는 무엇입니까?

utf8mb4에서는 1글자를 4바이트로 계산하므로 인덱스 키 길이가 늘어나기 때문입니다. `VARCHAR(255)` 단독 인덱스는 1020바이트가 되어 767바이트 상한 환경에서는 반드시 실패합니다. 열 길이 축소, 프리픽스 길이 지정, 행 포맷 재검토 중 하나를 먼저 수행하십시오.

어떤 콜레이션을 선택해야 합니까?

기존 비교 결과를 바꾸고 싶지 않은지 여부로 결정됩니다. `utf8mb4_general_ci`와 `utf8mb4_unicode_ci`는 동등하다고 간주하는 문자의 범위가 다르며, 고유 제약이 있는 열에서는 중복 판정이 바뀔 수 있습니다. `utf8mb4_0900_ai_ci`는 MySQL 8.0 호환 환경에서만 사용할 수 있습니다. 검증 환경에서 실제 데이터로 중복을 확인한 뒤 결정하십시오.

어떤 권한이 필요합니까?

조사 SQL은 `information_schema`를 조회할 수 있는 권한으로 충분합니다(메타데이터 가시성 규칙을 따르므로 권한이 없는 객체는 결과에 나타나지 않습니다). 변환에는 대상 테이블에 대한 `ALTER` 권한, 파라미터 그룹 변경에는 IAM 권한이 필요합니다.

서버 파라미터를 utf8mb4로 설정하면 기존 테이블도 바뀝니까?

바뀌지 않습니다. 파라미터는 앞으로 생성될 객체와 명시적으로 지정하지 않은 접속의 기본값에만 영향을 줍니다. 기존 데이터는 테이블별 `ALTER TABLE`이 필요합니다.

この文書がカバーする質問

  • MySQL에서 이모지를 저장하면 Incorrect string value가 발생함
  • utf8mb4로 변환했더니 인덱스 생성에 실패함
  • utf8과 utf8mb4 중 어느 것을 사용해야 하는가
  • Aurora MySQL의 기본 문자 집합을 utf8mb4로 바꾸고 싶다

リスク表示の意味

  • 参照のみデータと設定を変更しません。
  • 影響は限定的ですが、権限と負荷の確認が必要です。
  • 性能・ロック・コストに影響する可能性があります。
  • 障害・データ損失・復旧作業が発生する可能性があります。
  • 専門家レビュー必須本番適用前に別途レビューが必須です。

GIIPの対応範囲

문자 집합 마이그레이션은 "한 번 하면 끝나는" 작업처럼 보이지만, 실제로는 마이그레이션 이후에도 열 추가나 테이블 신규 생성 때마다 설정이 흔들립니다. GIIP에서는 utf8mb4화 대상 찾아내기 SQL을 정기적으로 실행하여 utf8mb4가 아닌 열이 새로 늘어나지 않았는지 지속적으로 점검합니다. 차이가 발생했을 때만 알려주고 스키마 변경의 타당성은 사람이 판단하도록 하고 있어, 마이그레이션이 끝난 후에도 설정이 원래대로 돌아가는 것을 방지할 수 있습니다.

執筆・技術検証

GIIP プロダクション運用チーム

大規模Webサービス、SQL Server、Oracle、AWS、Azureの設計・移行・運用に約30年従事。x12largeクラスのAWS RDS for SQL Server環境12セット、約12万テーブルのOracle環境、約3TBのTiDBからAurora MySQLへの移行を経験。現在も複数のクラウドデータベースと約30のWebサービスを、AIエージェントと人間の専門家が継続的に監視・運用しています。

関連するナレッジ

関連サービス

문자 집합 변환 검증 환경 구성을 상담하기

同じ確認を複数の環境で継続する必要がある場合は、運用体制ごと相談できます。

문자 집합 변환 검증 환경 구성을 상담하기

ナレッジベース一覧へ