Di dalam MySQL terdapat empat macam type data, yaitu; Numerik, String, Waktu / Tanggal dan Kelompok Himpunan (set dan enum). Berikut adalah penjelasan dari masing-masing type data tersebut.

1. Tipe Data Numeric
Pada tipe ini, data yang bisa disimpan hanya berupa angka. Yang mana bisa bernilai positif maupun negatif. Berikut ini adalah beberapa macamnya:
| Type | Storage | Minimum Value | Maximum Value |
|-----------|---------|----------------------|----------------------|
| | (Bytes) | (Signed/Unsigned) | (Signed/Unsigned) |
| TINYINT | 1 | -128 | 127 |
| | | 0 | 255 |
| SMALLINT | 2 | -32768 | 32767 |
| | | 0 | 65535 |
| MEDIUMINT | 3 | -8388608 | 8388607 |
| | | 0 | 16777215 |
| INT | 4 | -2147483648 | 2147483647 |
| | | 0 | 4294967295 |
| BIGINT | 8 | -9223372036854775808 | 9223372036854775807 |
| | | 0 | 18446744073709551615 |
| Type | Storage | Description |
|--------------|--------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| | (Bytes) | |
| FLOAT(M,D) | 4 | Digunakan untuk menyimpan data berupa bilangan pecahan positif atau negatif presisi tingkat tunggal. (M, ) mewakili panjang bilangan yang ingin ditampilkan, sedangkan ( ,D) mewakili jumlah desimal / angka di belakang koma. Sejumlah floating-point tidak bisa di-unsigned. Contoh: Jika Anda menginputkan nilai 999.00009 ke dalam FLOAT(7,4) maka value yang ditampilkan menjadi 999.0001. |
| DOUBLE(M,D) | 8 | Digunakan untuk menyimpan data berupa bilangan pecahan positif atau negatif presisi tingkat ganda. (M, ) mewakili pangjang bilangan yang ingin ditampilkan, sedangkan ( ,D) mewakili jumlah decimal yang ingin ditampilkan atau penyederhanaan. Sejumlah double floating-point tidak bisa di-unsigned. REAL adalah sinonim untuk DOUBLE. Contoh: s.d.a. |
| BIT(M) | Approximately (M+7)/8 bytes | Digunakan untuk menyimpan nilai bit-field. Suatu BIT(M) memungkinkan penyimpanan nilai M-bit yang berkisar 1-64. Untuk menentukan nilai bit dapat menggunakan notasi b'value', sementara itu 'value' adalah nilai biner (ditulis menggunakan angka 1 atau 0). Contoh: mysql> CREATE TABLE t (b BIT(8)); mysql> INSERT INTO t SET b = b'11111111'; |
| DECIMAL(M,D) | Simak Penjelasan Dibawah ini ! | |
DECIMAL dan/atau NUMERIC adalah sebuah unpacked floating-point number yang tidak bisa di unsigned.
Tipe ini digunakan untuk menjaga tingkat presisi dan hal-hal penting, misalnya data moneter (terkait dengan keuangan atau valuta).
Di MySQL, NUMERIC diimplementasikan sebagai DECIMAL, sehingga pernyataan tentang DECIMAL berlaku juga untuk NUMERIC.
Kolom nilai DECIMAL dan/atau NUMERIC direpresentasikan menggunakan format biner yang membungkus sembilan angka desimal (radix 10 atau basis 10) menjadi 4 byte. Penyimpanan integer dan bagian fraksi nilai ditentukan secara terpisah. Setiap kelipatan sembilan digit memerlukan empat byte, dan "sisa" Angka memerlukan fraksi empat byte. Penyimpanan yang diperlukan untuk "digit lebihan" atau "sisa angka" ditunjukan oleh tabel berikut;
| Leftover Digits | Number of Bytes |
|-----------------|-----------------|
| 0 | 0 |
| 1 | 1 |
| 2 | 1 |
| 3 | 2 |
| 4 | 2 |
| 5 | 3 |
| 6 | 3 |
| 7 | 4 |
| 8 | 4 |
Contoh:
salary DECIMAL(5,2)
Standard SQL mengharuskan DECIMAL(5,2) untuk kolom salary, artinya dapat menyimpan nilai apapun dengan ketentuan lima angka dan dua desimal, sehingga nilai-nilai tersebut berada di kisaran -999,99 s/d. 999,99.
2. Type Data String
Pada tipe ini digunakan untuk menyimpan data bernilai string, seperti alphanumeric (campuran angka dan karakter), karakter, dan numeric tanpa operasi, kecuali jika dikonversi.
Pada tabel di bawah ini, M merepresentasikan deklarasi panjang kolom untuk karakter, entah itu tipe binary maupun nonbinary. Sedangkan L merepresentasikan panjang aktual pada byte-nya nilai string.
| Data Type | Storage Required |
|--------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| CHAR(M) | M × w bytes, 0 <= M <= 255, di mana w adalah jumlah byte yang diperlukan untuk panjang maksimum karakter di set karakter. Lihat Bagian 15.8.3, "Struktur Fisik Row Tabel InnoDB" untuk informasi tentang kebutuhan penyimpanan tipe data CHAR pada tabel jenis InnoDB. Digunakan untuk menyimpan data string ukuran tetap. Jangkauan: 0 s/d 255 karakter |
| BINARY(M) | M bytes, 0 <= M <= 255 Digunakan untuk menyimpan data string ukuran dinamis. Jangkauan: 0 s/d 255 karakter (versi 4.1), 0 s/d 65.535 (versi 5.0.3) |
| VARCHAR(M), VARBINARY(M) | L + 1 bytes jika kolom nilai memerlukan 0-255 byte, L + 2 bytes jika nilai-nilai dimungkinkan perlu lebih dari 255 byte. |
| TINYBLOB, TINYTEXT | L + 1 bytes, Dimana L < 28 Digunakan untuk menyimpan data text. Jangkauan: 0 s/d 255 karakter (versi 4.1), 0 s/d 65.535 (versi 5.0.3) |
| BLOB, TEXT | L + 2 bytes, Dimana L < 216 Digunakan untuk menyimpan data text. Jangkauan : 0 s/d 65.535 (216 - 1) karakter |
| MEDIUMBLOB, MEDIUMTEXT | L + 3 bytes, Dimana L < 224 Digunakan untuk menyimpan data text. |
| LONGBLOB, LONGTEXT | L + 4 bytes, Dimana L < 232 Digunakan untuk menyimpan data text. |
BLOB (Biner)
Tipe data blob digunakan untuk menyimpan data biner. Tipe ini biasanya digunakan untuk menyimpan kode-kode biner dari suatu file atau object. BLOB merupakan singkatan dari Binary Large Object.
Kesimpulan
| Data Type | Max Size |
|------------|------------|
| Char | 255 Byte |
| Varchar | 255 Byte |
| Tinytext | 255 Byte |
| Tinyblob | 255 Byte |
| Text | 65535 Byte |
| Blob | 65535 Byte |
| Mediumtext | 1.6 MB |
| Mediumblob | 1.6 MB |
| Longtext | 4.2 GB |
| Longblob | 4.2 GB |
3. Tipe Data Waktu / Tanggal
Type data ini menyimpan informasi waktu, baik berupa jam maupun tanggal. Meskipun data yang disimpan adalah numerik tapi pembacaan yang dilakukan adalah string, jadi perlu peng-konversi-an bila ingin melakukan perhitungan. Berikut adalah type data waktu di MySQL.
| Data Type | “Zero” Value | Format |
|-----------|-----------------------|---------------------|
| DATE | '0000-00-00' | YYYY-MM-DD HH:MM:SS |
| TIME | '00:00:00' | YYYY-MM-DD |
| DATETIME | '0000-00-00 00:00:00' | HH:MM:SS |
| TIMESTAMP | '0000-00-00 00:00:00' | YYYY |
| YEAR | 0000 | YYYYMMDDHHMMSS |
Untuk kolom TIME, DATETIME, dan TIMESTAMP, yang dibuat dengan mySQL versi sebelum 5.6.4 berbeda dengan mySQL versi 5.6.4. Hal ini dikarenakan keunggulan versi terbaru yang memungkinkan kita menggunakan pecahan detik. Berikut perbandingannya:
| Data Type | Storage Required Before MySQL 5.6.4 | Storage Required as of MySQL 5.6.4 |
|-----------|-------------------------------------|--------------------------------------|
| DATE | 1 byte | 1 byte |
| TIME | 3 bytes | 3 bytes |
| DATETIME | 3 bytes | 3 bytes + fractional seconds storage |
| TIMESTAMP | 8 bytes | 5 bytes + fractional seconds storage |
| YEAR | 4 bytes | 4 bytes + fractional seconds storage |
Pada MySQL 5.6.4, penyimpanan untuk YEAR dan DATE tidak berubah. Namun, TIME, DATETIME, dan TIMESTAMP sudah berbeda. DATETIME dikemas lebih efisien, membutuhkan 5 - 8 byte untuk nonfractional part, namun ketiganya memiliki fractional part (bagian pecahan) dengan kebutuhan 0 - 3 byte, tergantung pada ketepatan nilai pecahan detik yang disimpan.
| Fractional Seconds Precision | Storage Required |
|------------------------------|------------------|
| 0 | 0 bytes |
| 1, 2 | 1 byte |
| 3, 4 | 2 bytes |
| 5, 6 | 3 bytes |
4. Tipe Data Himpunan (set dan enum)
Selain tipe data di atas, MySQL juga menyediakan tipe data yang lain. Tipe data di MySQL mungkin akan terus bertambah seiring dengan perkembangan versi MySQL.
ENUM adalah tipe data yang menyimpan daftar pilihan tetapi hanya satu saja yang boleh dipilih / disimpan. Sedangkan SET adalah tipe data yang mirip dengan ENUM, tapi boleh memilih lebih dari satu.
| Data Type | Description |
|-----------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ENUM('value1','value2',...) | 1 atau 2 byte, tergantung pada jumlah nilai enumerasi (65.535 nilai maksimum). Enumerasi adalah pencacahan satu per satu, atau sebuah tipe data yang nilainya hanya terbatas dari pilihan nilai-nilai yang telah didefinisikan terlebih dahulu. Enumerasi merupakan istilah keren untuk daftar, jadi ketika Anda ingin mendefinisikan sebuah ENUM, itu artinya Anda ingin membuat daftar item yang nilainya harus dipilih (atau bisa juga NULL sebagai defaultnya). Misalnya, jika Anda menghendaki bidang inputan berupa "A" atau "B" atau "C", maka Anda perlu mendefinisikan ENUM sebagai ENUM('A','B','C') default NULL (jika perlu). |
| SET('value1','value2',...) | 1, 2, 3, 4, atau 8 byte, tergantung pada jumlah anggota set(himpunan) (64 anggota maksimum). |
Referensi