Skip to content

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.

Table UNUM

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

Table 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.

{
    "Author":"Josephine Bush", 
    "book": "Learn SQL Programming"
}
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 type

Choosing 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