AliSQL mendukung fitur Instant Modify Column Charset. Fitur ini hanya mengubah metadata, sehingga menghindari pembuatan ulang tabel dan secara signifikan mengurangi waktu operasi serta meningkatkan efisiensi.
Ikhtisar fitur
Latar Belakang: Di MySQL komunitas, implementasi default set karakter UTF-8 adalah utf8mb3. Karena set karakter utf8mb3 menggunakan maksimal tiga byte per karakter, terjadi kehilangan data saat menyimpan karakter empat byte, seperti emoji. Meskipun MySQL komunitas telah mengubah set karakter defaultnya menjadi utf8mb4 mulai dari versi 8.0, modifikasi set karakter kolom pada tabel yang sudah ada biasanya tetap memerlukan pembuatan ulang tabel yang memakan waktu lama.
Ikhtisar: AliSQL mendukung fitur Instant Modify Column Charset. Alih-alih melakukan pembuatan ulang tabel—yang melibatkan pembuatan tabel sementara dan penyalinan data—fitur ini hanya memodifikasi metadata. Dengan demikian, modifikasi set karakter dapat diselesaikan dalam hitungan detik.
Algoritma: Kedua algoritma menyelesaikan operasi hanya dengan memodifikasi metadata. Saat Anda menggunakan fitur Instant Modify Column Charset, MySQL 5.7 hanya mendukung algoritma INPLACE. MySQL 8.0 mendukung kedua algoritma, yaitu INPLACE dan INSTANT.
Prasyarat
Untuk menggunakan fitur Instant Modify Column Charset, instans Anda harus memenuhi salah satu persyaratan versi database berikut. Jika versi mesin minor tidak memenuhi persyaratan, Anda dapat melakukan upgrade versi mesin minor.
MySQL 8.4
MySQL 8.0: versi mesin minor 20230630 atau lebih baru.
MySQL 5.7: versi mesin minor 20251031 atau lebih baru.
MySQL 8.0 (versi mesin minor 20230630 atau lebih baru) dan MySQL 8.4 mendukung kedua algoritma INPLACE dan INSTANT. MySQL 8.0 (dengan versi mesin minor sebelum 20230630) hanya mendukung algoritma INPLACE.
Fitur Instant Modify Column Charset memiliki batasan-batasan berikut:
Tipe Kolom: Anda hanya dapat mengonversi set karakter untuk kolom
CHARdanVARCHAR.Set Karakter: Hanya konversi dari
utf8/utf8mb3keutf8mb4yang didukung.Mesin Penyimpanan: Hanya mesin penyimpanan
InnoDByang didukung.Kolom yang Diindeks: Anda tidak dapat memodifikasi kolom yang diindeks.
Kunci Partisi: Anda tidak dapat memodifikasi kolom yang merupakan bagian dari kunci partisi.
Panjang Kolom: Modifikasi tidak boleh menyebabkan panjang penyimpanan maksimum kolom melewati batas 256 byte. Panjang tersebut harus tetap seluruhnya di bawah 256 byte atau seluruhnya pada atau di atas 256 byte. Untuk konversi dari
utf8/utf8mb3keutf8mb4:Untuk set karakter
utf8/utf8mb3, yang menggunakan 3 byte per karakter, ambang batas 256 byte setara dengan 85 karakter.Untuk set karakter
utf8mb4, yang menggunakan 4 byte per karakter, ambang batas 256 byte setara dengan 63 karakter.

Oleh karena itu, fitur Instant Modify Column Charset hanya didukung jika panjang kolom yang didefinisikan (dalam karakter) berada dalam rentang (0, 63] atau (85, 65535].
Manajemen parameter
Parameter
Modifikasi parameter berikut hanya jika Anda menggunakan MySQL 8.0 dan perlu menentukan algoritma INSTANT:
Parameter | Deskripsi |
|
|
|
|
Modifikasi parameter
Buka halaman Instances. Pada bilah navigasi atas, pilih Wilayah tempat instans RDS berada. Lalu, temukan instans RDS tersebut dan klik ID instansnya.
Pada panel navigasi kiri, klik Parameter Settings.
Pada tab Editable Parameters, cari parameter yang ingin Anda modifikasi dan ubah nilainya.
Klik OK, lalu klik Submit Parameters. Pada kotak dialog yang muncul, tentukan kapan nilai parameter baru akan berlaku.
Prosedur
Prosedur ini menggunakan contoh tabel t1 dengan skema berikut:
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;Menentukan algoritma
Anda dapat menentukan algoritma INPLACE atau INSTANT saat memodifikasi set karakter kolom.
Inplace algorithm
-- Tentukan algoritma INPLACE untuk mengubah set karakter kolom c1 dan c2 menjadi 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;
-- Lihat hasilnya.
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 algorithm
-- Tentukan algoritma INSTANT untuk mengubah set karakter kolom c3 dan c4 menjadi 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;
-- Lihat hasilnya.
SHOW CREATE TABLE `t1`\G
*************************** 1. row ***************************
Table: t1
Create Table: CREATE TABLE `t1` (
`id` int(11) NOT NULL,
`c1` char(10) CHARACTER DEFAULT NULL,
`c2` varchar(10) CHARACTER 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)Pemilihan algoritma otomatis
Jika Anda tidak menentukan algoritma, MySQL akan secara otomatis memilih algoritma yang paling sesuai.
-- Ubah set karakter kolom c1 menjadi utf8mb4 tanpa menentukan algoritma.
ALTER TABLE `t1` MODIFY `c1` char(10) CHARACTER SET utf8mb4 DEFAULT NULL;