Data Types on MySql
Tipe-tipe data dari MySql, string, numeric
- String termasuk didalamnya, charm varchart, binary, dan varbinary, blob, enum, set dan text.
- Numeric termasuk didalamnya, bit, int, float, double dan decimal.
- Date and Time termasuk didalamnya, date, time, datetime, timestamp, dan year.
String Data Type in MySql
Click untuk melihat rangkuman
Data Type | Description | Storage Used |
---|---|---|
CHAR[(size)] | Fixed-length string with size from 0-255 allowed; default of 1 if size not specified | Size in bytes |
VARCHAR(size) | Variable-length string with size from 0-65535 allowed | Length of string + 1 byte if less than 255 bytes + 2 bytes if greater than 255 bytes |
BINARY[(size)] | Binary fixed-length string with size from 0-255 allowed; default of 1 if size not specified | Size in bytes |
VARBINARY(size) | Binary variable-length string with size from 0-65535 allowed | Size in bytes + 1 byte if less than 255 bytes + 2 bytes if greater than 255 bytes |
BLOB(size) | Binary large objects with up to 65,535 bytes | Size in bytes + 2 bytes |
TINYBLOB | Binary large objects up to 255 in size | Size in bytes + 1 bytes |
MEDIUMBLOB | Binary large objects up to 16,177,215 in size | Size in bytes + 3 bytes |
LONGBLOB | Binary large object up to 4,294,967,295 in size | Size in bytes + 4 bytes |
TEXT(size) | Character strings with up to 65,535 bytes | Size of string + 2 bytes |
TINYTEXT | Character strings up to 255 in size | Size of string + 1 bytes |
MEDIUMTEXT | Character strings up to 16,177,215 in size | Size of string + 3 bytes |
LONGTEXT | Character strings up to 4,294,967,295 in size | Size of string + 4 bytes |
ENUM(val1, val2,val3,..) | String object that allows one value from a chosen list. The chosen list can be up to 65,535 values. | 1 or 2 bytes depending on the number of enumerated values |
SET(val1, val2,val3,..) | String object that allows zero or more values from a chosen list. The chosen list can be up to 64 values. | 1,2,3,4, or 8 bytes depending on number of set members |
CHAR
Char adalah fixed-length string, yang mana dapat diise dengan tulisan, angka dan karakter spesial. Type ini disebut blank-padded dan mengandung deretang blank ( ) pada field-nya. Field tersebut dapat menampung antara 1~255, dan bawaanya (jika tidak ada spesifikasi nilai seperti CHAR(10) adalah 1. Besaran angka yang ada pada kurung kurawal menunjukan panjang maksimal dari char yang dispesifikasikan oleh pengguna saat membuat data field. Ruang yang dibutuhkan untuk CHAR adalah \(^{*}n\) , dimana \(n <= size <= 255\), dimana \(n\) adalah byte yang dibutuhkan untuk menampung karakter tertinggi.
VARCHAR
Varchar adalah variable-length string, yang mana dapat menampung tulisan, angka dan karakter spesial. Field ini dapat menampung antara 0 - 65536 karakter.
Info
Dalam tahap memutuskan yang mana akan digunakan, antara CHAR & VARCHAR, CHAR adalah pilihan yang baik untuk menyimpan strings yang panjang nilai-nilainya sama, atau mendekati sama. Karena CHAR membutuhkan penyimpanan yang lebih sedikit dan lebih cepat saat melakukan query dibandingkan dengan VARCHAR. VARCHAR baik digunakan dalam kondisi nilai-nilai pada field nantinya berisikan panjang yang sangat signifikan, bisa panjang sekali atau sangat pendek, seperti nama depan atau nama belakang (Contoh. udi & Khrisnamukti)
Example Text | CHAR(5) | Field Size | VARCHAR(5) | FieldSize |
---|---|---|---|---|
'' |
' ' |
5 bytes | '' |
1 byte |
'as' |
'as ' |
5 bytes | 'as' |
3 bytes |
'asdf' |
'asdf ' |
5 bytes | 'asdf' |
5 bytes |
'asdfghj' |
'asdfg' |
5 bytes | 'asdfg' |
7 bytes |
BINNARY
Binnary seperti Char, namun yang disimpan adalah byte string, bukan karakter. Field ini dapat diisi menyimpan dengan rentang 0-255, dan ukuran bawaannya adalah 1. Contohnya, karakter ‘b’ didalama binnary kolom menjadi ‘b\0’ ketika dimasukan kedalam BINNARY field.
VARBINNARY
VARBINNARY sama seperi VARCHAR, namun yang disimpan adalah byte data. Field ini dapat menyimpan dengan rentang 0-65535
BLOB
Blob singkatan dari binary large objects, memperlakukan nilai-nilai seperti binary strings. Blob dapat menampung sebuah variable yang berisikan sejumlah data. Ada empat tipe BLOB, TINYBLOB, BLOBL, MEDIUMBLOB, & LONGBLOB. Yang membedakan tipe tersebut hanyalah jumlah data yang mereka bisa tampung.
Warning
Usahakan untuk tidak menggunakan BLOB karena akan membuat bengkak database dan akan membuat performa query menjadi buruk. Solusinya, simpan data kedalam disk atau file, lalu pada database yang disimpan hanya alamat kedalam disk atau file tersebut.
TEXT
Nilai dari TEXT disimpan pada text field dan diperlakukan seperti karakter dari pada binary strings. TEXT dapat menampung sebuah variabel yang berisikan sejumlah data. Ada empat tipe, TINYTEXT, TEXT, MEDIUMTEXT, & LONGTEXT. Yang membedakannya hanya jumlah data yang dapat ditampung.
ENUM
Enum singkatan dari enumerated list. ENUM(val1,val2,val3,...)
, anda dapat memasukan beberapa nilai yang dipisah dengan koma sebagai sebuah pilihan nantinya. Ketika meng-insert value kedalam tipe data ini, jika nilai yang dimasukan tidak tersedia dengan nilai yang dispesifikan diawal pada saat membuat field ini, maka nilai tersebut tidak akan di-insert atau di-update. Anda dapat memliki hingga 65,535 bytes didalam ENUM list. Contoh dibawah ini adalah table tipe data ENUM list.
SET
Sama seperti enum, namun dalam set, anda dapat memlilih lebih dari satu buah nilai yang tersedia. Mudahnya berikut adalah tabel yang berisikan nilai dengan tipe data SET
Numeric Data Type in MySQL
Numeric data type dapat menampung integers
, termasuk angka positif dan negatif. Juga dapat menampung fixed-point
dan floating-point
yang mana di simpan dalam bentuk pecahan.
Click untuk melihat rangkuman tipe data numeric
Data Type | Description | Storage Used |
---|---|---|
INT(size) | tores wholse numbers. Ranges from -2147483648 to 147483647 for signed and 0 to 4294967295 for unsigned. | 4 Bytes |
INYINT(size) | Stores whole numbers. Ranges from -128 to 127 for signed and 0 to 255 for unsigned. | 1 Bytes |
SMALLINT(size) | Stores whole numbers. Ranges from -32768 to 32767 for signed and 0 to 65535 for unsigned | 2 Bytes |
MEDIUMINT(size) | Stores whole numbers. Ranges from -8388608 to 8388607 for signed and 0 to 16777215 for unsigned. | 3 Bytes |
BIGINT(size) | Stores whole numbers. Ranges from -9223372036854775808 to 9223372036854775807 for signed or 0 to 8446744073709551615 for unsigned | 8 Bytes |
FLOAT(size, d) | Floating-point number. Where size is the digits in total, and d is the digits after the decimal place. The size ranges from 0 to 23. FLOAT(8,4) would display as 1234.5678 | 4 Bytes |
DOUBLE(size, d) | Floating point number. Where size is the digits in total, and d is the digits after the decimal place. The size ranges from 24 to 53. FLOAT(24,3) would display | |
as 123456789012345678901.123 | 8 Bytes | |
DECIMAL(size,d) | Exact fixed-point number. Maximum size is 65, and maximum d is 30. The default size is (10,0). | Variable |
BIT[(size)] | The range is 1 to 64. The default size is 1. | (size 7+)/8 Bytes |
Tipe data numeric didalam MySQL diantaranya;
INT
Dapat menampung -2147483648 hingga 2147483647. Tipe data ini hanya dapat menampung angka bulat. Jika ada nilai dalam bentuk pecahan yang dimasukan kedalam field dengan tipe data int maka akan dibulatkan keatas ataupun kebawah tergantung nilai pecahan. Jika anda mencoba menampung nilai yang melebihi batas daya tampung tipe data int maka nilai tersebut tidak akan disimpan, dan anda akan mendapatkan pesan error.
Contoh : Pembulatan nilai pecahan pada field dengan tipe data int
Value to Insert | INT value |
---|---|
12.34 | 12 |
12.76 | 13 |
Nilai - nilai dari int dapat di signed atau unsigned. Unsigned hanya dapat menyimpan angka positif dan signed dapat meyimpan angka positif dan negatif. Namun diingat, S==igned dan Unsigned tidak merubah daya tampungnya==, akan tetapi hanya merubah rentang ke posisi positifnya pada unsigned. Tabel dibawah ini menggambarkan daya tampung berdasarkan signed dan unsigned values dari tipe-tipe seperti int (beda ukuran penampungan)
Types | Signed Range | Usigned Range |
---|---|---|
TINYINT | -128 to 127 | 0 to 255 |
SMALLINT | -32768 to 32767 | 0 to 65535 |
MEDIUMINT | -8388608 to 8388607 | 0 to 16777215 |
INT | -2147483648 to 2147483647 | 0 to 4294967295 |
BIGINT | -9223372036854775808 to 9223372036854775807 | 0 to 18446744073709551615 |
Dalam memilih tipe data int, sangat penting untuk memlih ukuran yang sekecil mungkin agar mengurangi pemakaian ruang peyimpanan, smaller is better when we talk about eats storage space.
FLOAT
Floating-point number, maksudnya adalah tidak ada nomor yang tetap dari digit-digit sebelum dan sesudah desimal, sehingga angka desimal dapat mengambang (berganti-ganti). Untuk menggunakan tipe data ini, gunakan FLOAT(size,p), dimana size
adalah digit angka keseluruhan (termasuk desimal), dan p
adalah digit angka desimal. Ukuran maksimum dari size adalah 24. Jika besaran nilai yang anda miliki diatas dari 24, gunakan Double. Keakuratan Float mendekati 7 angka desimal.
Sebagai contoh, jika anda ingin menyimpan nilai 1234.5678, anda harus membuat data type FLOAT(8,4). Float sangat berguna untuk hal seperi kalkulasi ilmiah dimana tambahan nilai dsimal sangat membantu.
DOUBLE
Floating-point-number. Syntax untuk menggunakannya DOUBLE(size,d) dimana size
adalah digit angka keseluruhan (termasuk desimal), dan p
adalah digit angka desimal.
Tipe data double memiliki keakuratan hingga 14 digit desimal. Untuk meyimpan angka seperti 1234567890123456789012345.1234567, anda harus membuat DOUBLE(33,7).
Danger
Jangan gunakan tipe Float dan Doubel untuk data keuangan karena kedua tipe tersebut tidak seakurat DECIMAL.
BIT
Meyimpan nilai biner (binary). Syntax-nya BIT(size), dimana size adalah angka dalam bit yang dapat ditampung. Rentang nilai dari size yang dapat diberikan adalah antara 1 - 64. Jika size tidak diisi, nilai bawaannya adalah 1. Secara umum, BIT menyimpang 0 dan 1 nilai boolean, dimana 0 adalah false, dan 1 adalah true.
Date and time data types in MySQL
Click untuk melihat rangkuman tipe data Date and Time
Data Type | Description | Storage Used |
---|---|---|
DATE | Stores dates in the format 'YYYY-MM-DD' Ranges from '1000-01-01' to '9999-12-31' | 3 bytes |
TIME | Stores time in format: hh:mm:ss Ranges from '-838:59:59' to '838:59:59' |
3 bytes |
DATETIME | Stores date and time combination in format YYYY-MM-DD hh:mm:ss Ranges from '1000-01-01 00:00:00' to '9999-12-31 23:59:59' |
8 bytes |
TIMESTAMP | Stores time in number of seconds since '1970-01-01 00:00:00' UTC Ranges from '1970-01-01 00:00:01' UTC to '2038-01-09 03:14:07' UTC | 4 bytes |
YEAR | Stores year in four-digit format Ranges from 1901 to 2155, and includes 0000 | 1 bytes |
Date
Tipe data ini dapat meyimpan tanggal dalam format YYYY-MM-DD
. Rentangnya antaran 1000-01-01 hingga 9999-12-31. Sebagai contoh, December 15, 1995, akan disimpan dalam bentuk 1995-12-15.
TIME
Tipe data ini dapat meyimpan waktu dalam format hh:mm:ss
, dengan rentang dari -838:59:59 hingga 838:59:59
DATETIME
Tipe data ini adalah kombinasi dari DATE dan TIME, disimpan dalam bentuk YYYY-MM-DD hh:mm:ss
. Memiliki rentang 1000-01-01 00:00:00 hingga 9999-12-31 23:59:59. Sebagai contoh, tanggal → January 19, 2003, at 3:30 p.m akan disimpang dalam bentuk 2003-01-19 15:30:00
TIMESTAMP
Tipe data ini dapat meyimpan nilai yang terdiri dari tangga dan time. Tipe ini memliki rentang, 1970-01-01 00:00:00 UTC hingga 2038-01-19 03:14:07 UTC (Coordinate Universal Time; formerly Greenwich Mean Time). Nilai ini disimpan dalam bentuk detik.
Perbedaan TIMESTAMP dan DATETIME
Perbedaan yang siginifikan diantranya keduanya adalah, nilai TIMESTAMP disimpan dalam bentuk UTC dan ketika di query akan dikonversi ke current timezone. Disisilain, nilai DATETIME disimpan sudah dalam bentuk current time zone
YEAR
Tipe data ini dapat meyimpan tahun dalam bentuk 4 digit. Rentangnya dari 1901 higga 2155 dan 0000.
Other Data Type in MySQL
JSON
Tipe data ini dapat menyimpan JSON (JavaScript Object Notation), dibawah ini adalah contoh syntax dari JSON.
MySql menyediakan validasi secara otomatis, sehingga ketika anda meyimpan JSON kedalam field denga type JSON, MySql akan memastikan format JSON tersebut benar atau tidak. Sebaliknya, jika anda menyimpannya (misalkan) VARCHAR, maka tidak ada jaminan data yang tersimpan tersebut sudah benar bentuk format JSON-nya. Lebih lanjut baca catatan tambahan json data typeChoosing the right data type
Sangat penting untuk dipahami bagaimana efek penggunaan penyimpanan (storage usage) terhadap database. Kebanyakan database disimpan didalam sebuah disk (Dalam beberapa kasus tertentu dapat juga disimpan didalam memory). Sewaktu database mengambil data fetching data, database tersebut harus membaca kedalam disk dan mengembalikan hasilnya ke pengguna. Disinilah dimana I/O (Input/Output) berkerja.
Disk I/O secara terus menerus membaca dan menulis disk, dan tingkat tersebutlah yang mempengaruhi kecepatan data ditransfer dari disk kedalam memory. Semakin banyak data yang diambil semakin lama data diterima, ditambah jika banyak pengguna yang mengambil data secara bersamaan, maka akan semakin lama lagi proses yang dibutuhkan. Inilah mengapa pemilihan tipe data sangat vital.
Ini beberapa alasan pentingnya memilih tipe data yang tepat, diantaranya;
-
Jika anda memliki tipe data yang besar melebihi data yang nantinya akan disimpan, hal tersebut membuat boros tempat peyimpanan. Semakin kecil ruang penyimpanan yang digunakan, semakin banya data yang anda miliki di memory (RAM), ini akan meningkatkan performa databse.
-
Jika anda memlih tipe data yang lebih kecil dibandingkan data yang nanti akan disimpan, ini akan menyebabkan data yang anda simpan akan di trucated ketika di insert, atau akan menyebabkan error ketika proses insert tersebut.
Contoh pemilihan data type yang tepat
-
Sebuah pernyataan yang (misalkan) kodenegara yang terdiri dari dua huruf, ID or MY. Lebih baik menggunakna CHAR dari pada VARCHAR, karena nilai-nilai tersebut memiliki panjang karakter yang sama. CHAR(2)
-
Pernyataan seperti nama daerah, Jakarta, Bandung, Sulawesi barat dsb. Lebih baik menggunakan VARCHAR (dengan spesifikasi maksimal karakter) karena variasi panjang karakter dari data yang akan disimpan. VARCHAR(30).
-
Sebuah kalimat atau paragrap lebih baik dimasukan kedalam field tipe TEXT dan pada tabel yang terpisah (sendiri) untuk mengoptimalkan performa tabel. TEXT
-
Meyimpan files, atau image, dibanyak kondisi gunakan filesystem. Jangan menyimpan files atau image kedalam database. BLOB
-
Enumerated dan set values, sebisa mungkin hindari tipe data ini karena jika anda memutuskan ingin menambahkan sebuah nilai kedalam ENUM dan SET, MySql harus membuat ulang table, dan ditambah dengan kondisi anda memliki jumlah baris yang sangat banyak, akan menyebabkan penggunaan waktu yang berlebihan. Selain itu, developers dapat membuat logika tertentu pada sisi aplikasi untuk menangani hal tersebut dibandingkan dengan MySql table yang dapat lakukan. ENUM or SET
-
Untuk menyimpan 0 dan 1, seperti jikan nilai true or false. BIT