DEV Community

Dhiecoderweb
Dhiecoderweb

Posted on • Originally published at dhiecoderweb.com

Perbedaan CHAR, VARCHAR, dan TEXT di MySQL

Saat merancang tabel di MySQL, salah satu keputusan penting adalah memilih tipe data yang tepat untuk kolom teks. MySQL menyediakan beberapa tipe data untuk menyimpan string: CHAR, VARCHAR, dan TEXT (beserta variannya). Memilih tipe yang salah bisa berdampak pada performa query, penggunaan penyimpanan, dan bahkan fungsionalitas aplikasi. Artikel ini membahas perbedaan mendetail antara ketiganya.

CHAR – Panjang Tetap

CHAR adalah tipe data string dengan panjang tetap (fixed-length). Jika Anda mendefinisikan CHAR(10) dan menyimpan string "Halo" (4 karakter), MySQL akan mengisi sisa ruang dengan spasi hingga panjangnya menjadi 10 karakter. Ketika data dibaca, spasi tambahan di akhir akan dihapus otomatis.

  • Panjang maksimum: 255 karakter.
  • Penyimpanan: Selalu menggunakan ruang sebesar yang didefinisikan.
  • Cocok untuk: Data dengan panjang yang sudah pasti dan seragam.
-- Contoh penggunaan CHAR
CREATE TABLE kode_negara (
    kode CHAR(2) NOT NULL PRIMARY KEY,  -- ID, US, MY, SG
    nama_negara VARCHAR(100) NOT NULL
) ENGINE=InnoDB;

CREATE TABLE kartu_member (
    no_kartu CHAR(16) NOT NULL PRIMARY KEY,  -- selalu 16 digit
    nama_pemegang VARCHAR(100) NOT NULL,
    tipe CHAR(1) NOT NULL   -- 'G' = Gold, 'S' = Silver, 'P' = Platinum
) ENGINE=InnoDB;
Enter fullscreen mode Exit fullscreen mode

VARCHAR – Panjang Bervariasi

VARCHAR adalah tipe data string dengan panjang variabel (variable-length). MySQL hanya menyimpan karakter yang benar-benar ada, ditambah 1 atau 2 byte sebagai prefiks panjang. Jika Anda mendefinisikan VARCHAR(255) dan menyimpan "Halo" (4 karakter), hanya 5 byte yang digunakan (4 karakter + 1 byte prefiks).

  • Panjang maksimum: 65.535 karakter (tergantung row size limit dan charset).
  • Penyimpanan: Sesuai panjang data aktual + 1-2 byte overhead.
  • Cocok untuk: Data teks dengan panjang bervariasi seperti nama, email, atau judul.
-- Contoh penggunaan VARCHAR
CREATE TABLE pengguna (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    email VARCHAR(150) NOT NULL UNIQUE,
    nama_lengkap VARCHAR(200) NOT NULL,
    no_telepon VARCHAR(15),
    kota VARCHAR(100),
    dibuat_pada DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;
Enter fullscreen mode Exit fullscreen mode

Artikel ini ditampilkan sebagian. Untuk pembahasan selengkapnya, beserta contoh dan langkah detailnya, Anda dapat membacanya pada sumber aslinya:

Perbedaan CHAR, VARCHAR, dan TEXT di MySQL

Tutorial pemrograman dan tools developer lainnya juga tersedia di dhiecoderweb.com.

Top comments (0)