Laman

Rabu, 06 Juni 2012

Salah Kaprah Data Integer MySQL

3 tanggapan

Awalnya kita akan menyimpan data nilai matematika, rentang nilai adalah 0 s/d 100. Tipe data apa yang akan dipilih? Apakah INT(3)!

Jika YA, mari kita berkelana bersama…

Mengenal Ragam Jenis Interger

Di dalam MySQL dikenal jenis data numeric antara lain TINYINT, SMALLINT, MEDIUMINT, INT (atau INTEGER), BIGINT, FLOAT, DOUBLE, REAL, DECIMAL, NUMERIC, dan BIT. Sementara kita tinggalkan yang lain dan memusatkan kepada 5 yang pertama.

Menurut kitab MySQL Manual bab pembahasan Data Type Storage Requirements, ragam jenis interger dibedakan dari ruang penyimpanan (memori) yang digunakan. Rincian lihat tabel berikut,

Jenis

Memori Digunakan

TINYINT

1 byte

SMALLINT

2 byte

MEDIUMINT

3 byte

INT atau INTEGER

4 byte

BIGINT

8 byte

Kemudian, ruang penyimpanan ini yang menentukan rentang nilai angka yang bisa ditampung. Sebagai contoh, tipe data TINYINT menggunakan memori 1 byte = 8 bit. Sehingga rentang nilai yang dapat tampung TINYINT,

Rentang = 2n(bit) = 28 = 256.
Rentang nilai TINYINT adalah 256, berarti 0 s/d 255 (untuk unsigned/tanpa tanda) atau –128 s/d 127 (signed/bertanda). Lengkapnya bisa dilihat pada tabel berikut,

Jenis

Memori Digunakan

Rentang

 
TINYINT

1 byte = 8 bit

0 s/d 255 unsigned
    -128 s/d 127 signed
SMALLINT

2 byte = 16 bit

0 s/d 65535 unsigned
    -32.768 s/d 32.767 signed
MEDIUMINT

3 byte = 24 bit

0 s/d 16.777.215 unsigned
    -8.388.608 s/d 8.388.607 signed
INT/INTEGER

4 byte = 32 bit

0 s/d 4.294.967.295 unsigned
    -2.147.483.648 s/d 2.147.483.647 signed
BIGINT

8 byte = 64 bit

0 s/d 18.446.744.073.709.551.615 unsigned
    -9.223.372.036.854.775.808 s/d 9.223.372.036.854.775.807 signed

Kembali pada permasalahan menyimpan nilai matematika 0 s/d 100, tipe data apa yang seharusnya digunakan? Jika sebelumnya Ki Sanak memilih tipe data INT, artinya kolom tersebut dapat menampung rentang nilai 2 miliar+. Lebih tepat gunakan TINYINT.

Lantas, apa masalahnya? Toh tetap bisa disimpan kan?
Ya memang, tetapi kesalahan pilihan jenis data menyebabkan efiensi ruang penyimpanan terabaikan.

Tunggu, tunggu… Apa Makna (3) pada INT(3)?

Sebelumnya didefinisikan tipe data INT(3), bukan kah artinya INT dengan maksimal panjang 3 karakter???

Kerancuan Panjang Tampilan

Perlu cermati, bahwa tipe data integer tidak sama dengan tipe data varchar, yang mana nilai length membatasi panjang karakter. Pada VARCHAR(3), bila di-insert nilai “EMPU” akan tersimpan sebagai “EMP”. Tidak demikian pada INT(3), bila di-insert nilai 1986 maka akan tersimpan 1986. Ini dikarenakan nilai 1986 masih dapat ditampung dalam rentang 2 miliar.

Length 3 pada INT(3) adalah panjang tampilan. Ki Sanak dapat menggunakan opsi length ini jika menginginkan nilai integer “tampil” seragam. Opsi length ini digunakan bersama ZEROFILL. Sehingga untuk INT(3) ZEROFILL, akan tampil:

  • 007
  • 049
  • 100
  • 083

Ikhtisar

  1. Deklarasi length pada INT dan saudara-saudaranya tidak membatasi nilai yang dapat di-insert selama masih dalam rentang nilai penyimpanan.
  2. Deklarasi LENGTH pada INT tidak mempengaruhi memori yang digunakan untuk penyimpanan data.