Categorized | MySQL

Tags :

Menggunakan type data mysql yang baik, perlukah?

Ketika membuat sebuah database, pada masing2 tabel nya kita buat kolom yang memang sesuai dengan type datanya, hal ini penting karena saat melakukan order by, mysql secara default akan memperlakukan data sesuai type datanya.

Sebagai contoh anggaplah kita akan membuat database mahasiswa,

CREATE DATABASE `mahasiswa` ;
 
CREATE TABLE `data_mahasiswa` (
`nis` INT( 10 ) NOT NULL ,
`nama` VARCHAR( 100 ) NOT NULL ,
`umur` TINYINT NOT NULL ,
PRIMARY KEY ( `nim` )
) ENGINE = MYISAM ;
 
INSERT INTO `data_mahasiswa` ( `nim` , `nama` , `umur` )
VALUES
('02510010', 'Nama Siswa 1', '24'),
('02510012', 'Nama Siswa 2', '8'),
('02510013', 'Nama Siswa 3', '7'),
('02510015', 'Nama Siswa 4', '5'),
('02510018', 'Nama Siswa 5', '31'),
('02510019', 'Nama Siswa 6', '11'),
('02510011', 'Rudi Hermawan', '13')
;

Disini umur mempunyai type data TINYINT, mysql membacanya sebagai bilangan integer/bilangan bulat sehingga jika diurutkan dari kecil kebesar dengan order by ASC hasilnya benar

SELECT *
FROM `data_mahasiswa`
ORDER BY `data_mahasiswa`.`umur` ASC

Hasilnya : 5 7 8 11 13 24 31

atau dari umur terbesar ke umur terkecil dengan order by DESC


SELECT *
FROM `data_mahasiswa`
ORDER BY `data_mahasiswa`.`umur` DESC

Hasilnya : 31 24 13 11 8 7 5

Nah bagaimana jika kolom umur dijadikan varchar, perintah untuk menggantinya adalah

ALTER TABLE `data_mahasiswa` CHANGE `umur` `umur` VARCHAR( 4 ) NOT NULL

Jika di urutkan dari kecil ke besar (ASC)
hasilnya : 11 13 24 31 5 7 8

Jika di urutkan dari besar ke kecil (DESC)
hasilnya : 8 7 5 31 24 13 11

Kenapa bisa begitu, karena kolom umur oleh mysql dianggap sebagai string (varchar) sehingga angka 8 menjadi lebih besar dari 13, dan angka 11 akan dianggap lebih kecil dari 8.

Kesimpulannya adalah jika membuat suatu database harap perhatikan betul type datanya.

Kalau sudah terlanjur dan anda tidak ingin merubah tipe datanya, dan kita ingin merubah type string menjadi angka, caranya pakai Cast Functions and Operators di mysql.
Contoh :

SELECT *
FROM `data_mahasiswa`
ORDER BY CAST(`umur` AS SIGNED) ASC

Atau


SELECT *
FROM `data_mahasiswa`
ORDER BY CONVERT(`umur`, SIGNED) ASC

keterangannya adalah CAST(expr AS type), CONVERT(expr,type) dimana expr merupakan kondisi bilangan yang akan di convert, sedangkan type adalah convert tujuan yang terdiri dari:

BINARY[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]

Semoga informasi ini berguna…

2 Comments For This Post

  1. sul Says:

    kalau database sudah ada gimana ? apakah harus ngganti desain table juga. malah ribet, apalagi kalau sistem sudah berjalan lama dan database cukup besar. Resiko tinggi.

    Ada cara cukup jitu untuk mengakali, yaitu dengan mengkonvert umur ke integer. sourcenya :

    SELECT *
    FROM `data_mahasiswa`
    ORDER BY `data_mahasiswa`.`umur`,convert(`data_mahasiswa`.`umur`,signed) DESC

  2. tyo Says:

    mas mau tanya kalo di sql kenapa record dalam field type varchar jika ada tanda kutip tunggal pasti erorr

    wasalam

Leave a Reply

  • Popular
  • Comments
  • Tags
  • Subscribe
Advertise Here

Category

Tag Cloud