全部产品
Search
文档中心

PolarDB:Mengubah set karakter kolom secara instan

更新时间:Jul 06, 2025

Jika Anda menentukan set karakter UTF-8 untuk sebuah kolom di MySQL, secara default set karakter UTF8MB3 digunakan. Set karakter ini menggunakan hingga tiga byte untuk menyimpan setiap karakter. Untuk menyimpan informasi seperti emoji, Anda harus mengubah set karakter kolom menjadi UTF8MB4. Biasanya, perubahan ini memerlukan pembangunan ulang seluruh tabel, yang memakan waktu dan berdampak signifikan pada bisnis Anda. PolarDB for MySQL memungkinkan Anda mengubah set karakter kolom secara instan tanpa memengaruhi operasional bisnis.

Prasyarat

Kluster Anda harus memenuhi salah satu dari persyaratan versi berikut:

  • Kluster PolarDB for MySQL 8.0.1 dengan versi revisi 8.0.1.1.40 atau lebih baru. Untuk melihat versi kluster Anda, lihat bagian Memeriksa versi engine dalam topik "Versi engine".

    Catatan

    Untuk menggunakan fitur ini di kluster PolarDB for MySQL 8.0.1, Anda harus terlebih dahulu mengonfigurasi parameter loose_innodb_support_instant_modify_charset.

  • PolarDB for MySQL 8.0.2.

    Catatan

    Fitur ini tersedia out-of-the-box pada kluster PolarDB for MySQL 8.0.2 tanpa konfigurasi tambahan.

Batasan

  • Anda hanya dapat mengubah set karakter untuk kolom bertipe data CHAR, VARCHAR, ENUM, atau TEXT.

  • Anda hanya dapat mengubah set karakter kolom dari UTF8MB3 ke UTF8MB4 atau mengubah tipe data kolom dari tipe acuan ke BINARY.

  • Tidak ada indeks yang dibuat pada kolom yang set karakternya akan diubah.

  • Panjang kolom yang set karakternya akan diubah harus memenuhi persyaratan berikut:

    • Sebelum dan sesudah mengubah set karakter kolom, panjang penyimpanan maksimum kolom harus kurang dari 256 byte atau lebih dari 255 byte. Panjang penyimpanan adalah jumlah byte yang sebenarnya ditempati oleh set karakter.

      Contohnya, jika kolom bertipe data VARCHAR(85) menggunakan set karakter UTF8MB3, panjang penyimpanan maksimum kolom dihitung sebagai berikut: 85 × 3 = 255 byte karena set karakter UTF8MB3 menggunakan hingga tiga byte per karakter. Jika set karakter kolom diubah menjadi UTF8MB4, panjang penyimpanan maksimum kolom dihitung sebagai berikut: 85 × 4 = 340 byte. Karena panjang penyimpanan maksimum setelah perubahan lebih besar dari 256 byte, set karakter kolom tidak dapat diubah secara instan.

    • Panjang penyimpanan maksimum kolom setelah perubahan tidak boleh lebih kecil dari sebelum perubahan.

      Contohnya, jika kolom bertipe data CHAR(120) menggunakan set karakter UTF8MB3, panjang penyimpanan maksimum kolom dihitung sebagai berikut: 120 × 3 = 360 byte. Jika Anda mengubah tipe data kolom menjadi BINARY, panjang penyimpanan maksimum kolom dihitung sebagai berikut: 120 × 1 = 120 byte. Dalam hal ini, set karakter kolom tidak dapat diubah secara instan.

Menggunakan fitur untuk mengubah set karakter kolom secara instan

  1. Mengonfigurasi parameter.

    Untuk kluster PolarDB for MySQL 8.0.1, Anda harus menyetel parameter loose_innodb_support_instant_modify_charset ke ON untuk mengaktifkan fitur. Informasi lebih lanjut tentang cara mengonfigurasi parameter dapat ditemukan di Mengonfigurasi parameter kluster dan node.

    Parameter

    Tingkat

    Deskripsi

    loose_innodb_support_instant_modify_charset

    Global

    Menentukan apakah akan mengaktifkan fitur untuk mengubah set karakter kolom secara instan. Nilai default: OFF. Nilai valid:

    • OFF

    • ON

  2. Menjalankan pernyataan.

    • Tetapkan parameter ALGORITHM ke INPLACE untuk memaksa penggunaan fitur perubahan set karakter kolom secara instan. Contoh:

      ALTER TABLE tablename MODIFY COLUMN test_column varchar(60) CHARACTER SET utf8mb4, ALGORITHM = INPLACE;

      Jika algoritma INPLACE tidak tersedia, pesan berikut dikembalikan. Dalam hal ini, pastikan bahwa parameter loose_innodb_support_instant_modify_charset disetel ke ON dan periksa aturan yang dijelaskan dalam bagian "Batasan" dari topik ini.

      ERROR 1846 (0A000): ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY.
    • Jika Anda menetapkan parameter ALGORITHM ke DEFAULT atau tidak menentukan parameter ALGORITHM, PolarDB memilih algoritma tercepat untuk mengubah set karakter kolom. Contoh:

      ALTER TABLE tablename MODIFY COLUMN test_column varchar(60) CHARACTER SET utf8mb4, ALGORITHM = DEFAULT;
      ALTER TABLE tablename MODIFY COLUMN test_column varchar(60) CHARACTER SET utf8mb4;

Menampilkan hasil eksekusi

Dalam contoh ini, dua tabel bernama t1 dan t2 digunakan, masing-masing berisi 10 juta baris data. Set karakter kolom diubah dari UTF8MB3 ke UTF8MB4 ketika fitur untuk mengubah set karakter kolom secara instan diaktifkan dan dinonaktifkan. Tabel t1 dan t2 memiliki struktur dan ukuran data yang sama.

  • Ketika fitur dinonaktifkan, seluruh tabel harus dibangun ulang untuk mengubah set karakter kolom. Proses ini membutuhkan sekitar 1 menit untuk membuat ulang tabel dan hanya operasi kueri yang dapat dilakukan selama proses DDL sepenuhnya.

    ALTER TABLE t1 MODIFY COLUMN c varchar(2)  CHARACTER SET utf8mb4 NOT NULL DEFAULT '';

    Hasil sampel:

    Query OK, 10000000 rows affected (59.66 sec)
    Records: 10000000  Duplicates: 0  Warnings: 0
  • Ketika fitur diaktifkan, Anda dapat mengubah set karakter kolom secara instan terlepas dari ukuran data tabel.

    ALTER TABLE t2 MODIFY COLUMN c varchar(2)  CHARACTER SET utf8mb4 NOT NULL DEFAULT '',ALGORITHM = INPLACE;

    Hasil sampel:

    Query OK, 0 rows affected (0.03 sec)
    Records: 0  Duplicates: 0  Warnings: 0

Hubungi kami

Jika Anda memiliki pertanyaan tentang operasi DDL, hubungi kami.