すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:カラム文字セットの即時変更

最終更新日:May 13, 2026

AliSQL は、カラム文字セットの即時変更機能をサポートしています。この機能はメタデータのみを変更し、テーブルの再構築を回避します。これにより、操作時間が大幅に短縮され、効率が向上します。

機能概要

背景:コミュニティ版 MySQL では、UTF-8 文字セットのデフォルト実装は utf8mb3 です。utf8mb3 文字セットは 1 文字あたり最大 3 バイトを使用するため、絵文字などの 4 バイト文字を格納するとデータ損失が発生します。コミュニティ版 MySQL はバージョン 8.0 からデフォルトの文字セットを utf8mb4 に変更しましたが、既存のテーブルの列の文字セットを変更するには、通常、時間のかかるテーブルの再構築が必要です。

概要:AliSQL は、カラム文字セットの即時変更機能をサポートしています。一時テーブルを作成してデータをコピーするテーブルの再構築の代わりに、この機能はメタデータのみを変更します。これにより、文字セットの変更が数秒で完了します。

アルゴリズム:どちらのアルゴリズムもメタデータのみを変更することで操作を完了します。 カラム文字セットの即時変更機能を使用する場合、MySQL 5.7 は INPLACE アルゴリズムのみをサポートします。 MySQL 8.0 は INPLACE アルゴリズムと INSTANT アルゴリズムの両方をサポートします。

前提条件

カラム文字セットの即時変更機能を使用するには、インスタンスが次のいずれかのデータベースバージョン要件を満たす必要があります。マイナーエンジンバージョンが要件を満たしていない場合は、マイナーエンジンバージョンをアップグレードできます。

  • MySQL 8.4

  • MySQL 8.0:マイナーエンジンバージョン 20230630 以降。

  • MySQL 5.7:マイナーエンジンバージョン 20221031 以降。

説明

MySQL 8.0 (マイナーエンジンバージョン 20230630 以降) および MySQL 8.4 は、INPLACEINSTANT の両方のアルゴリズムをサポートします。 MySQL 8.0 (マイナーエンジンバージョンが 20230630 より前) は、INPLACE アルゴリズムのみをサポートします。

カラム文字セットの即時変更機能には、次の制限があります:

  • 列のタイプ: 文字セットを変換できるのは、CHAR 型および VARCHAR 型の列のみです。

  • 文字セット: utf8/utf8mb3 から utf8mb4 への変換のみがサポートされています。

  • ストレージエンジン: InnoDB ストレージエンジンのみがサポートされています。

  • インデックスカラム:インデックスカラムは変更できません。

  • パーティションキー:パーティションキーの一部であるカラムは変更できません。

  • カラム長:変更によって、カラムの最大格納長が 256 バイトの境界を越えることがあってはなりません。長さは、256 バイト未満、または 256 バイト以上のいずれかの状態を維持する必要があります。utf8/utf8mb3 から utf8mb4 への変換の場合:

    • 1 文字あたり 3 バイトを使用する utf8/utfbmb3 文字セットの場合、256 バイトのしきい値は 85 文字です。

    • 1 文字あたり 4 バイトを使用する utf8mb4 文字セットの場合、256 バイトのしきい値は 63 文字です。

    image

    したがって、カラム文字セットの即時変更機能は、定義されたカラム長 (文字数) が (0, 63] または (85, 65535] の範囲内である場合にのみサポートされます。

パラメーター管理

パラメーター

次のパラメーターは、MySQL 8.0 を使用し、INSTANT アルゴリズムを指定する必要がある場合にのみ変更します:

パラメーター

説明

loose_rds_upgrade_datatype_instant_enable

  • 説明:カラム型の即時変更機能を制御します。

  • スコープ:グローバルパラメータ。

  • データ型: Boolean

  • デフォルト値:OFF

  • 有効な値は ON または OFF です。

  • 再起動の要否:いいえ。

loose_innodb_instant_ddl_enabled

  • 説明:Instant DDL 操作を制御します。

  • スコープ:グローバルパラメータ。

  • データ型: Boolean

  • デフォルト値: ON

  • 有効な値は ON または OFF です。

  • 再起動の要否:いいえ。

パラメーターの変更

  1. RDSインスタンスにアクセスし、上部のリージョンを選択し、対象のRDSインスタンスのIDをクリックします。
  2. 左側のナビゲーションペインで、[パラメーター設定] をクリックします。

  3. [編集可能なパラメーター] タブで、変更するパラメーターを検索し、その値を変更します。

  4. [OK] をクリックし、次に[パラメーターの送信]をクリックします。表示されるダイアログボックスで、新しいパラメーター値がいつ有効になるかを指定します。

手順

この手順では、次のスキーマのテーブル t1 を例として使用します。

CREATE TABLE `t1` (
  `id` int NOT NULL,
  `c1` char(10) DEFAULT NULL,
  `c2` varchar(10) DEFAULT NULL,
  `c3` char(100) DEFAULT NULL,
  `c4` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

アルゴリズムの指定

列の文字セットを変更する際に、INPLACE または INSTANT アルゴリズムを指定できます。

Inplace アルゴリズム

-- INPLACE アルゴリズムを指定して、c1 および c2 カラムの文字セットを utf8mb4 に変更します。
ALTER TABLE `t1` MODIFY `c1` char(10) CHARACTER SET utf8mb4 DEFAULT NULL, ALGORITHM=INPLACE;
ALTER TABLE `t1` MODIFY `c2` varchar(10) CHARACTER SET utf8mb4 DEFAULT NULL, ALGORITHM=INPLACE;

-- 結果を表示します。
SHOW CREATE TABLE `t1`\G
*************************** 1. row ***************************
       Table: t1
Create Table: CREATE TABLE `t1` (
  `id` int(11) NOT NULL,
  `c1` char(10) CHARACTER SET utf8mb4 DEFAULT NULL,
  `c2` varchar(10) CHARACTER SET utf8mb4 DEFAULT NULL,
  `c3` char(100) DEFAULT NULL,
  `c4` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

Instant アルゴリズム

-- INSTANT アルゴリズムを指定して、c3 および c4 カラムの文字セットを utf8mb4 に変更します。
ALTER TABLE `t1` MODIFY `c3` char(100) CHARACTER SET utf8mb4 DEFAULT NULL, ALGORITHM=INSTANT;
ALTER TABLE `t1` MODIFY `c4` varchar(100) CHARACTER SET utf8mb4 DEFAULT NULL, ALGORITHM=INSTANT;

-- 結果を表示します。
SHOW CREATE TABLE `t1`\G
*************************** 1. row ***************************
       Table: t1
Create Table: CREATE TABLE `t1` (
  `id` int(11) NOT NULL,
  `c1` char(10) CHARACTER SET utf8mb4 DEFAULT NULL,
  `c2` varchar(10) CHARACTER SET utf8mb4 DEFAULT NULL,
  `c3` char(100) CHARACTER SET utf8mb4 DEFAULT NULL,
  `c4` varchar(100) CHARACTER SET utf8mb4 DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

アルゴリズムの自動選択

アルゴリズムを指定しない場合、MySQL は自動的に最適なものを選択します。

-- アルゴリズムを指定せずに、c1 カラムの文字セットを utf8mb4 に変更します。
ALTER TABLE `t1` MODIFY `c1` char(10) CHARACTER SET utf8mb4 DEFAULT NULL;