Pendahuluan
Sebagai sistem database, baik MySQL maupun PostgreSQL menawarkan berbagai tipe data, masing-masing dengan properti dan batasan yang unik.
Artikel ini membandingkan tipe data antara MySQL dan PostgreSQL. Berikut adalah tabel perbandingannya.
MySQL (Kapasitas) | PostgreSQL (Kapasitas) |
---|---|
TINYINT (1B) |
- |
SMALLINT (2B) |
SMALLINT (2B) |
INT (4B) |
INT (4B) |
BIGINT (8B) |
BIGINT (8B) |
FLOAT (4B) |
NUMERIC (4B) |
DATE |
DATE |
DATETIME |
- |
TIME |
TIME |
TIMESTAMP |
TIMESTAMP |
CHAR (255B) |
CHAR (1GB) |
VARCHAR (65KB) |
VARCHAR (1GB) |
TINYTEXT (255B) |
- |
TEXT (65KB) |
TEXT (1GB) |
MEDIUMTEXT (16MB) |
- |
LONGTEXT (4GB) |
- |
Pemetaan Tipe Data Numerik
Berikut ini adalah pemetaan tipe data numerik antara MySQL dan PostgreSQL.
TINYINT di MySQL
Di MySQL, TINYINT
adalah tipe data integer kecil. Ukurannya satu byte, yang memungkinkan rentang nilai dari -128 hingga 127 untuk nilai bertanda atau 0 hingga 255 untuk nilai tak bertanda. PostgreSQL tidak memiliki kesetaraan langsung untuk TINYINT
. Namun, dalam banyak kasus, TINYINT
dapat didekati menggunakan tipe SMALLINT
atau tipe BOOLEAN
tergantung pada konteksnya.
SMALLINT di MySQL dan PostgreSQL
Baik MySQL maupun PostgreSQL memiliki tipe data SMALLINT
. Di MySQL, SMALLINT
adalah integer dua byte. Untuk nilai tak bertanda, ia dapat menyimpan angka dari 0 hingga 65535. Untuk nilai bertanda (default), rentangnya adalah -32768 hingga 32767. Tipe SMALLINT
di PostgreSQL sepenuhnya sejajar dengan MySQL; menggunakan dua byte penyimpanan dan mendukung rentang nilai yang sama.
INT di MySQL dan PostgreSQL
INT
adalah tipe data integer yang umum digunakan baik di MySQL maupun PostgreSQL. Ia menggunakan empat byte penyimpanan. Rentang nilai untuk INT
di MySQL adalah -2147483648 hingga 2147483647 untuk nilai bertanda atau 0 hingga 4294967295 untuk nilai tak bertanda. PostgreSQL tidak memiliki tipe data integer tak bertanda, namun tipe INT
-nya sejajar dengan rentang tipe INT
bertanda di MySQL, sehingga memberikan kompatibilitas untuk sebagian besar kasus penggunaan umum.
BIGINT di MySQL dan PostgreSQL
BIGINT
adalah tipe integer terbesar di MySQL dan PostgreSQL. Ia menggunakan delapan byte penyimpanan. Rentang untuk BIGINT
bertanda di MySQL adalah -9223372036854775808 hingga 9223372036854775807. Untuk nilai BIGINT
tak bertanda, rentangnya adalah 0 hingga 18446744073709551615. Seperti halnya dengan tipe INT
, tipe BIGINT
di PostgreSQL memiliki rentang yang sama dengan BIGINT
bertanda di MySQL.
FLOAT di MySQL dan NUMERIC di PostgreSQL
FLOAT
di MySQL adalah tipe data bilangan pecahan empat byte. Ia dapat menyimpan nilai desimal, dan rentang presisi tergantung pada nilai spesifiknya. Di sisi lain, tipe NUMERIC
di PostgreSQL dapat secara presisi menyimpan angka dengan sejumlah digit yang besar. Ukurannya bervariasi tetapi dapat dengan nyaman menangani jenis data yang biasanya disimpan dalam tipe FLOAT
di MySQL.
Pemetaan Tipe Data Tanggal dan Waktu
Representasi tanggal dan waktu merupakan aspek yang penting dalam database karena digunakan dalam berbagai aplikasi seperti pencatatan peristiwa, pelacakan aktivitas, dan analisis deret waktu. Berikut ini adalah bagaimana MySQL dan PostgreSQL menangani pemetaan tipe data ini.
DATE di MySQL dan PostgreSQL
Baik di MySQL maupun PostgreSQL, tipe data DATE
digunakan untuk menyimpan tanggal. Ia menyimpan tahun, bulan, dan hari dengan format YYYY-MM-DD. Rentangnya di MySQL adalah '1000-01-01' hingga '9999-12-31', sedangkan di PostgreSQL, rentangnya adalah dari 4713 SM hingga 5874897 M, yang memberikan jangkauan yang lebih luas.
DATETIME di MySQL
DATETIME
adalah tipe data di MySQL yang digunakan untuk menyimpan tanggal dan waktu. Rentangnya dari '1000-01-01 00:00:00' hingga '9999-12-31 23:59:59'. Tipe data ini sangat berguna untuk menyimpan titik waktu yang presisi. PostgreSQL tidak memiliki kesetaraan yang tepat untuk tipe data DATETIME
; sebagai gantinya, PostgreSQL menggunakan TIMESTAMP
tanpa zona waktu untuk tujuan yang serupa.
TIME di MySQL dan PostgreSQL
Tipe data TIME
digunakan untuk merepresentasikan waktu dalam sehari baik di MySQL maupun PostgreSQL. Di MySQL, TIME
dapat merepresentasikan durasi atau waktu dalam sehari dengan rentang '-838:59:59' hingga '838:59:59'. Di PostgreSQL, TIME
dapat menyimpan waktu dalam sehari tanpa zona waktu, dan rentangnya adalah '00:00:00' hingga '24:00:00'.
TIMESTAMP di MySQL dan PostgreSQL
Baik MySQL maupun PostgreSQL mendukung tipe data TIMESTAMP
. Di MySQL, TIMESTAMP
digunakan untuk menyimpan pasangan tanggal dan waktu. Rentangnya dari '1970-01-01 00:00:01' UTC hingga '2038-01-19 03:14:07' UTC. Sebaliknya, tipe data TIMESTAMP
di PostgreSQL dapat menampung tanggal dan waktu dari 4713 SM hingga 294276 M. PostgreSQL menawarkan fleksibilitas yang lebih besar, karena mendukung baik TIMESTAMP WITH TIME ZONE
maupun TIMESTAMP WITHOUT TIME ZONE
.
Pemetaan Tipe Data String
Menyimpan dan memanipulasi data string adalah tugas umum dalam database.
CHAR di MySQL dan PostgreSQL
Di MySQL, tipe data CHAR
digunakan untuk menyimpan string karakter dengan panjang tetap. Panjangnya dapat ditentukan dalam byte dan rentangnya dari 0 hingga 255 byte. CHAR
di PostgreSQL, juga dikenal sebagai CHARACTER
, berperilaku serupa tetapi dengan satu perbedaan utama - panjang maksimum di PostgreSQL jauh lebih besar, yaitu 1GB.
VARCHAR di MySQL dan PostgreSQL
Tipe data VARCHAR
di MySQL dan PostgreSQL digunakan untuk menyimpan string karakter dengan panjang variabel. VARCHAR
di MySQL dapat menyimpan hingga 65.535 byte data, sementara VARCHAR
(atau CHARACTER VARYING
) di PostgreSQL dapat menyimpan hingga 1GB.
TINYTEXT di MySQL
TINYTEXT
adalah tipe khusus MySQL yang digunakan untuk menyimpan string dengan panjang variabel. Ia dapat menyimpan hingga 255 byte data. Tidak ada kesetaraan langsung untuk tipe ini di PostgreSQL, tetapi kasus penggunaannya dapat dicakup oleh tipe TEXT
.
TEXT di MySQL dan PostgreSQL
Di MySQL, tipe data TEXT
digunakan untuk menyimpan string dengan panjang variabel dengan panjang maksimum 65.535 byte. PostgreSQL juga menawarkan tipe data TEXT
, tetapi dapat menyimpan string hingga 1GB. Perbedaan kapasitas ini perlu dipertimbangkan saat melakukan migrasi database.
MEDIUMTEXT di MySQL
Tipe data MEDIUMTEXT
di MySQL adalah tipe string dengan panjang variabel yang lainnya. Ia dapat menyimpan string dengan panjang maksimum 16.777.215 byte (atau 16MB). Seperti halnya TINYTEXT
, tidak ada kesetaraan langsung untuk tipe MEDIUMTEXT
di PostgreSQL, tetapi tipe TEXT umum dapat menangani data serupa karena kapasitasnya yang besar.
LONGTEXT di MySQL
LONGTEXT
adalah tipe data MySQL yang digunakan untuk menyimpan sejumlah besar teks, dengan panjang maksimum 4.294.967.295 byte (atau 4GB). PostgreSQL tidak memiliki kesetaraan langsung untuk tipe LONGTEXT
, tetapi tipe TEXT
di PostgreSQL seharusnya cukup untuk sebagian besar aplikasi karena kapasitasnya yang besar, yaitu 1GB.