Ruang penulis
← Kembali ke jurnal
MySQL

Tipe data JSON di MySQL 8 untuk data fleksibel

Simpan dan query data JSON secara native tanpa mengubahnya jadi teks biasa.

DTim Diary Coding · 30 Agt 2026 · 2 menit baca

Kolom JSON native di MySQL

Sejak versi 5.7, MySQL memiliki tipe kolom JSON yang tervalidasi otomatis dan tersimpan dalam format biner internal, sehingga lebih efisien dibanding menyimpan JSON sebagai teks.

CREATE TABLE preferensi (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    pengguna_id BIGINT UNSIGNED NOT NULL,
    pengaturan JSON NOT NULL
);

INSERT INTO preferensi (pengguna_id, pengaturan)
VALUES (1, '{"tema": "gelap", "bahasa": "id"}');

Mengambil nilai dari kolom JSON

SELECT
    pengguna_id,
    pengaturan->>'$.tema' AS tema
FROM preferensi
WHERE pengaturan->>'$.bahasa' = 'id';

Operator ->> mengambil nilai dan langsung mengubahnya menjadi teks, sehingga bisa langsung dibandingkan dengan string biasa.

Generated column untuk mempercepat pencarian

ALTER TABLE preferensi
    ADD COLUMN tema VARCHAR(20)
    GENERATED ALWAYS AS (pengaturan->>'$.tema') STORED,
    ADD INDEX idx_preferensi_tema (tema);

Generated column menyalin nilai dari JSON ke kolom biasa yang bisa diindeks, karena indeks langsung pada ekspresi JSON tidak selalu didukung secara efisien di semua versi MySQL.

Validasi struktur di sisi database

ALTER TABLE preferensi
    ADD CONSTRAINT chk_pengaturan
    CHECK (JSON_VALID(pengaturan));

Meski kolom bertipe JSON otomatis tervalidasi, constraint tambahan berguna jika Anda membatasi struktur tertentu yang wajib ada.

Latihan

Tambahkan generated column baru untuk field bahasa, lalu buat indeks gabungan antara tema dan bahasa.

← Jelajahi catatan lainnya