Tipe data selanjutnya yang akan kita pelajari setelah Tutorial Belajar MySQL: Tipe Data Numerik adalah tipe data karakter atau huruf (dalam permograman sering disebut tipe data string).
MySQL menyediakan beberapa tipe data string: CHAR, VARCHAR, BINARY, VARBINARY, TEXT dan BLOB. Perbedaan dari tipe data ini adalah dari ukuran, cara penyimpanan, dan dukungan case-sensitif (perbedaan huruf besar dan kecil). Kita akan membahasnya secara mendetail dalam tutorial belajar MySQL: Tipe Data String (Huruf) MySQL kali ini.
Tipe data CHAR dan VARCHAR MySQL
Tipe data CHAR dan VARCHAR adalah tipe data karakter (string) yang akan sering kita gunakan.
Format query tipe data CHAR dan VARCHAR:
CHAR [(M)] VARCHAR [(M)]
Dimana M adalah jumlah karakter yang akan dialokasikan oleh MySQL. Misalkan nilai M=5, maka MySQL menyediakan 5 karakter untuk kolom tersebut. Nilai maksimal M adalah 255 karakter untuk CHAR, dan 65,535 karakter untuk VARCHAR. Jika nilai M tidak di nyatakan, nilai defaultnya M=1.
Perbedaan antara CHAR dan VARCHAR adalah dari cara MySQL mengalokasikan ukuran penyimpanan data yang diinput kedalam kolom tersebut. Contohnya, jika kita mendefiniskan sebuah tabel dengan kolom bertipe CHAR(5), walaupun huruf atau karakter yang kita inputkan hanya 1 karakter, MySQL tetap menyimpan kolom tersebut untuk 5 karakter. Namun jika kita definiskan sebagai VARCHAR(5), dan kita menginput data dengan jumlah karakter 2, maka ukuran penyimpanan hanya akan menggunakan 2 karakter, sehingga VARCHAR lebih fleksibel dan efisien.
Tetapi untuk fleksibilitas ini, tipe VARCHAR memerlukan proses tambahan untuk menyimpan ukuran dari masing-masing data. Sehingga VARCHAR akan sedikit lebih lambat bila dibandingkan CHAR. Walaupun demikian, proses ini hampir tidak terdeteksi, anda bebas menggunakan CHAR atau VARCHAR untuk tipe data string.
Contoh perbedaan antara CHAR dan VARCHAR dapat kita lihat dari tabel dibawah ini:
Data | CHAR(5) | Ukuran Peyimpanan | VARCHAR(5) | Ukuran Peyimpanan |
---|---|---|---|---|
' ' | ' ' | 5 byte | ' ' | 1 byte |
'du' | 'du ' | 5 byte | 'du' | 3 byte |
'dunia' | 'dunia' | 5 byte | 'dunia' | 6 byte |
'duniailkom' | 'dunia' | 5 byte | 'dunia' | 6 byte |
Dari tabel diatas, kita dapat melihat bahwa ukuran penyimpanan untuk VARCHAR berubah-ubah tergantung data yang diinput. Namun sebenarnya VARCHAR membutuhkan 1 byte tambahan untuk menyimpan panjang data. Jika kita definiskan VARCHAR(5) dan menginputkan 'dunia', maka akan membutuhkan 5+1 byte. Berbeda dengan CHAR(5) yang tidak membutuhkan tambahan byte.
Jadi, kebutuhan akan tipe data antara CHAR dan VARCHAR bergantung kepada seperti apa data yang akan kita input. Tipe data CHAR cocok digunakan untuk kolom yang memiliki jumlah karakter tetap, misalnya untuk nomor KTP, ID pelanggan dan NIM mahasiswa. Sedangkan tipe data VARCHAR akan lebih cocok digunakan untuk kolom yang berisi data yang berbeda-beda ukuran, seperti nama, alamat dan kota.
Baik CHAR maupun VARCHAR data yang diinput akan disimpan secara case insensitif, dimana huruf besar dan kecil tidak dibedakan.
Untuk tipe data CHAR, jika kita menginputkan data dengan spasi dibelakangnya, misalnya 'aku  ' (terdapat 3 spasi setelah 'aku'), maka sewaktu menampilkan data, spasi tersebut akan otomastis dihapus oleh MySQL, menjadi'aku'. Pertimbangkan menggunakan VARCHAR jika hal ini anda butuhkan, dimana VARCHAR akan tetap menampilkan 'aku  '.
Contoh query membuat tabel dengan tipe data CHAR dan VARCHAR :
mysql> CREATE TABLE contoh_cha (cha CHAR(5), varcha VARCHAR(5)); Query OK, 0 rows affected (0.06 sec) mysql> INSERT INTO contoh_cha values ('a ','a '); Query OK, 1 row affected (0.05 sec) mysql> INSERT INTO contoh_cha values ('dunia','dunia'); Query OK, 1 row affected (0.05 sec) mysql> INSERT INTO contoh_cha values ('duniailkom','duniailkom'); ERROR 1406 (22001): Data too long for column 'cha' at row 1 mysql> SELECT * FROM contoh_cha; +-------+--------+ | cha  | varcha | +-------+--------+ | a    | a     | | dunia | dunia | +-------+--------+ 2 rows in set (0.00 sec)
Tipe Data BINARY dan VARBINARY dalam MySQL
Pada dasarnya tipe data BINARY dan VARBINARY sama dengan CHAR dan VARCHAR, perbedaannya hanya pada struktur peyimpanan dalam MySQL, dimana tipe data binary akan disimpan secara biner (bit per bit), bukan secara karakter seperti CHAR. Sederhananya, hal ini akan berefek pada case-sensitif data (perbedaan penggunaan huruf besar dan huruf kecil).
Pada tipe data CHAR, jika kita menyimpan data 'A', maka secara internal MySQL akan menyimpannya sebagai karakter 'A', dimana 'A' akan sama dengan 'a'. Namun untuk tipe data BINARY, 'A' akan disimpan sebagai bit dari 'A', yaitu 65, dan akan berbeda dengan 'a', dimana nilai binernya adalah 97.
Format query tipe data BINARY dan VARBINARY:
BINARY [(M)] VAR BINARY [(M)]
Dimana sama seperti tipe data CHAR dan VARCHAR, M adalah jumlah karakter yang akan dialokasikan oleh MySQL. Misalkan nilai M adalah 5, maka MySQL menyediakan 5 karakter untuk kolom tersebut. Nilai M maksimal 255 karakter untuk BINARY, dan 65,535 karakter untuk VARBINARY. Jika nilai M tidak di nyatakan, nilai defaultnya adalah 1.
BINARY akan disimpan dalam ukuran yang tetap, sedangkan VARBINARY akan berubah sesuai ukuran data (sama dengan perbedaan antara CHAR dan VARCHAR)
Contoh query membuat tabel dengan tipe data BINARY dan VARBINARY :
mysql> CREATE TABLE contoh_bin (bin BINARY(5), varbin VARBINARY(5)); Query OK, 0 rows affected (0.08 sec) mysql> INSERT INTO contoh_bin values ('dunia','dunia'); Query OK, 1 row affected (0.04 sec) mysql> SELECT * FROM contoh_bin; +-------+--------+ | bin  | varbin | +-------+--------+ | dunia | dunia | +-------+--------+ 1 row in set (0.00 sec) mysql> SELECT * FROM contoh_bin where bin='dunia'; +-------+--------+ | bin  | varbin | +-------+--------+ | dunia | dunia | +-------+--------+ 1 row in set (0.00 sec) mysql> SELECT * FROM contoh_bin where bin='DUNIA'; Empty set (0.00 sec)
Perhatikan bahwa pada query terakhir, tidak menampilkan hasil apa-apa, karena dalam BINARY, 'dunia' tidak sama dengan 'DUNIA'.
Tipe Data TEXT MySQL
Untuk data string yang lebih besar, MySQL menyediakan tipe data TEXT, yang terdiri dari : TINYTEXT, TEXT, MEDIUMTEXT, dan LONGTEXT. Maksimal ukuran masing-masing tipe data dapat dilihat dari tabel dibawah ini:
Tipe Data | Ukuran Maksimum | Jumlah Karakter Maksimum |
---|---|---|
TINYTEXT | 255 byte | 255 |
TEXT | 65.535 byte (64 KB) | 6.5535 |
MEDIUMTEXT | 16.777.215 byte (16MB) | 16.777.215 |
LONGTEXT | 4.294.967.295 (4GB) | 4.294.967.295 |
Setiap tipe data text disimpan berdasarkan berapa data yang diinput, sama seperti VARCHAR, dimana jika kita mendefinisikan suatu kolom sebagai LONGTEXT, dan hanya berisi 100 karakter, ukuran penyimpanan yang digunakan sekitar 100 byte, bukan 4GB.
Contoh query membuat tabel dengan tipe data TEXT :
mysql> CREATE TABLE contoh_text (tin TINYTEXT, tex TEXT, lon LONGTEXT); Query OK, 0 rows affected (0.05 sec) mysql> DESC contoh_text; +-------+----------+------+-----+---------+-------+ | Field | Type    | Null | Key | Default | Extra | +-------+----------+------+-----+---------+-------+ | tin  | tinytext | YES |    | NULL   |      | | tex  | text    | YES |    | NULL   |      | | lon  | longtext | YES |    | NULL   |      | +-------+----------+------+-----+---------+-------+ 3 rows in set (0.09 sec) mysql> INSERT INTO contoh_text values ('duniailkom', 'duniailkom','duniailkom.com'); Query OK, 1 row affected (0.04 sec) mysql> SELECT * FROM contoh_text; +------------+------------+----------------+ | tin       | tex       | lon           | +------------+------------+----------------+ | duniailkom | duniailkom | duniailkom.com | +------------+------------+----------------+ 1 row in set (0.00 sec)
Tipe Data BLOB MySQL
Tipe data BLOB adalah tipe data versi binary dari TEXT, dimana karakter akan disimpan dalam bit. Dan untuk karakter huruf, huruf besar dan kecil akan dibedakan ('A' tidak sama dengan 'a'). Sama seperty TEXT, BLOB juga memiliki beberapa tipe : TINY BLOB, BLOB, MEDIUM BLOB, dan LONGBLOB.
Ukuran serta jangkauan dari BLOB sama seperti TEXT, seperti pada tabel berikut ini:
Tipe Data | Ukuran Maksimum | Jumlah Karakter Maksimum |
---|---|---|
TINYBLOB | 255 byte | 255 |
BLOB | 65.535 byte (64 KB) | 65.535 |
MEDIUMBLOB | 16.777.215 byte (16MB) | 16.777.215 |
LONGBLOB | 4.294.967.295 (4GB) | 4.294.967.295 |
Karena sifatnya yang tersimpan secara binary,tipe data BLOB dapat digunakan untuk menyimpan data multimedia, seperti gambar dan musik kedalam tabel MySQL.
mysql> CREATE TABLE contoh_blob (tin TINYBLOB, blo BLOB, lon LONGBLOB); Query OK, 0 rows affected (0.14 sec) mysql> DESCRIBE contoh_blob; +-------+----------+------+-----+---------+-------+ | Field | Type    | Null | Key | Default | Extra | +-------+----------+------+-----+---------+-------+ | tin  | tinyblob | YES |    | NULL   |      | | blo  | blob    | YES |    | NULL   |      | | lon  | longblob | YES |    | NULL   |      | +-------+----------+------+-----+---------+-------+ 3 rows in set (0.01 sec) mysql> INSERT INTO contoh_blob values ('duniailkom', 'duniailkom','duniailkom.com'); Query OK, 1 row affected (0.05 sec) mysql> SELECT * FROM contoh_blob; +------------+------------+----------------+ | tin       | blo       | lon           | +------------+------------+----------------+ | duniailkom | duniailkom | duniailkom.com | +------------+------------+----------------+ 1 row in set (0.01 sec)
Dalam tutorial MySQL kali ini kita telah membahas tentang tipe data String dalam MySQL. Tipe data string mungkin adalah tipe data yang paling sering digunakan di dalam pembuatan tabel. Melanjutkan pembahasan tentang tipe data, dalam tutorial MySQL selanjutnya kita akan membahas tentang cara penggunaan tipe data date dalam MySQL.
sangat membantu saya ,,, terima kasih
Terimakasih juga atas kunjungannya trian, semoga artikel ini bisa bermanfaat dalam mempelajari MySQL
saya mau tanya mas,
apakah tipe data integer bisa di isi dengan default" ".
seperti car dan varchar bisa diisi dengan defaultnya string kosong,
apakah integer bisa seperti itu?
kalau bisa,
gmna mas??
ALTER TABLE `nama_tabel` CHANGE `nama_kolom` `nama_kolom` type_kolom NULL;
Gan, ane mau tanya, bedanya tipe data varchar dan text apa ya? Ane msh bingung
@adi, mungkin saya bisa bantu jawab ya…saya gak tau maksud om adi Text itu apa..yang namanya tipe data varchar( variasi karakter) artinya itu berisi berbagai variasi karakter.baik !@#%$#^^&*()(*&@^% nah..ini semua masuk varchar… kalau char itu hanya karakter aja contoh…a <<ini karakter..
kalau yg saya fahami perbedaan text dan varchar
kalau text biasanya digunakan untuk contoh kolom komentar, opini, kritik dan saran, dan sejenisnya
kalau varchar biasanya digunakan untuk contoh kolom nama, alamat, status dll.
benar apa ga ya admin?
Perbedaan paling jelas dari besar teks yang bisa ditampung gan. Tipe data varchar hanya sanggup menampung maksimum 65,535 karakter, sedangkan tipe data teks bisa sampai 4 milyar karakter.
Jika data yang ingin disimpan relatif singkat seperti nama, alamat, no hp, sebaiknya pakai varchar. Karena MySQL mengakses varchar lebih cepat daripada tipe data teks.
terima kasih min, kebetulan lagi mencari type data untuk memasukan no hp, sangat membantu
makasih mas
terimakasih juga atas kunjungannya gan…
si andre emang kereenn…. top penjelasannyahh, smg Allah membalasmu
Terimakasih gan… :) amiiin…
wih penjelasannya padet banget nih hehe,
thanks bro sangat bermanfaat.
salam IT :D (Y)
min, bedanya text sama varchar apa ya?
Saya rasa sudah dijelaskan dalam tutorial ini gan, silahkan dibaca2 lagi :)
Secara singkat, tipe data text bisa menyimpan data yang lebih besar daripada varchar.
min, kok masih tetep ada pesan data too long ya, padahal tipe datanya udah diganti. kira-kira knpa ya?
Mau nyimpan apa sampe keluar pesan data too long gan? hehe..
Untuk data teks yang besar bisa pakai tipe data "teks", dan kayaknya g mungkin agan punya data teks hingga 4GB.
min kenapa type data text dan blob tidak diberi [M] banyaknya karakter, apa type char juga bisa tidak di kasih [M].
Setiap tipe data memiliki fitur dan aturan masing2 gan, jadi g bisa disamakan kalau yang satu g pakai, kenapa yang lain pakai, hehe….
Dicoba saja langsung. Kalau error berarti g bisa. Tp seingat saya untuk char harus menggunakan [M].
mas ada artikel tutorial cara agar data yg di imput di table tidak perlu kode script misalnya untuk enter kita tidak perlu mengetik kode <br> gitu?
Untuk itu mesti menggunakan aplikasi editor seperti Dreamweaver. Tp aplikasi ini tidak saya sarankan bagi yang pengen belajar HTML. Karena justru coding itu yang seharusnya kita pelajari, bukan cara penggunaan aplikasi dreamweaver.
Jika sudah paham codingnya dan pengen cepat, baru pas pakai aplikasi tersebut.
kalo kita ingin data yg keluar di MySQL adalah perubahan nilai sensor yg terukur (misalnya perubahan suhu oleh sensor suhu diproses arduino lalu perbahan data tadi mengubah nilai si data pada field MySQL) dalam artian nilainya bisa berubah2 atau fleksibel, tipe data yg digunakan apa ya.?
terimakasih
Saya kurang tau kalau di arduino, yang jelas kalau datanya berupa angka bisa menggunakan integer/float/decimal. Terutama kalau nilai ini nantinya pengen diproses lagi. Tapi kalau ada kemungkinan hasilnya berupa huruf, bisa pakai varchar saja.
untuk no plat kendaraan tipe data stringnya apa iyaa min?
Sepertinya lebih pas tipe data varchar(15), karena no plat kendaraan sudah gabungan huruf dan angka. Angka 15 untuk jaga2 jika suatu saat nomor plat bisa cukup panjang. Saat ini maksimalnya cuma 11 digit: dua huruf, satu spasi, empat angka, satu spasi, dan tiga huruf, seperti: "BK 4762 XYZ".
Saya ada kasus, membuat tabel komen dengan field komentar tipe datanya text. kemudian dari program web melalui textarea yg telah disediakan oleh wysiwyg ckeditor, kok tidak bisa menyimpan seluruh komentar dengan jumlah yang sangat banyak ya? apalagi komentarnya ada tandabaca dsb. saya cek ke tabel pasti hanya sebagian komentar yg tersimpan atau tdk sama sekali tersimpan. itu dikarenakan dari ckeditornya atau tipe data field yang saya buat salah?
Harus di cek dulu satu2… misalnya apakah data yang dikirim dari ckeditor memang utuh, atau malah sudah kepotong. Caranya bisa di echo langsung di PHP.
Jika data dari form tidak ada masalah, baru input ke kolom dengan tipe text lalu cek di database pakai PHPmyAdmin. Jika terpotong, test dengan ganti kolomnya dengan tipe blob.
Jika di database tidak ada masalah, proses selanjutnya menampilkan data ini. Bisa juga disini yang terpotong,..
Terima kasih duniailkom , sangat membantu dalam belajar .
Terus update yaa….
Mau nanya nih, apa spasi terhitung sebagai karakter varchar juga dan menambah jumlah byte dari data yang di input??
Kalau g salah di VARCHAR tidak terhitung, selama spasi itu berada di awal dan akhir. Tapi kalau tipe data CHAR ikut dihitung. Boleh di test langsung untuk lebih pastinya…
Permisi mau nanya kalo membuat tabel dengan isian NIM dan angka 0 didepannya seperti 03051181419003 itu mengunaka tipe apa ya?
Bisa pakai CHAR karena angka NIM itu jumlah digitnya sudah tetap, misalnya CHAR(14). Tapi kalau ada kemungkinan digitnya berubah-ubah, bisa pakai VARCHAR.
Permisi gan mau nanya untuk supaya tipe data text dapat membaca garis baru taanpa menambahkaan TAG <br> dalam tulisan gimana ya gan. Makasih.
Adakah kasus yang nyata penggunaan tipe data binary atau blob? Terus buat apa menyimpan bentuk data binary dalam db apakah lebih ringan atau lebih cepat dibandingkan dengan bukan binary?
Tipe data binary atau blob cocok untuk menyimpan data digital yang tidak berbentuk teks. Misalnya menyimpan file gambar, mp3, atau video langsung ke tabel.
Mas bisa nggak merubah panjang nila varchar suatu table menjadi lebih banyak?
Maksudnya ingin mengubah kolom VARCHAR ya? Bisa, nanti pakai query ALTER. Lebih lengkapnya bisa ke sini: https://www.duniailkom.com/tutorial-mysql-merubah-tabel-alter-table/
Untuk membutikan ukuran penyimpanan data (alokasi memori) ketika menggunakan char seperti apa ya kak?
Kalau sampai ke ukuran memory, saya juga kurang tau seperti apa cara melihatnya. Data diatas diambil dari dokumentasi resmi MySQL di https://dev.mysql.com/doc/refman/8.0/en/char.html
Mas ko saya yang binary sama varbinary pas mau nampilin data nya malah berupa angka ya ( angka nya 0x64756e6961) ? cara nampilin ke bentuk hurufnya gimana mas ?
UP mas Andre, punya saya juga begini
Apakah kodenya persis seperti pada contoh tutorial ini ya? juga pakai MySQL versi berapa?
Barusan saya test ulang di MariaDB bawaan XAMPP 8 tidak ada masalah, tapi bisa jadi ada perubahan pengaturan di MySQL versi terbaru (kebetulan saya belum sempat install).
mas saya juga kaya gitu bagaimana yah di binary, varbinary dan di type blob
sama sih seperti ini, hasil di bin sama varbin-nya 0x64756E6961
btw asli ini keren sih ngajarin-nya…makasi Mas…
Kalo file gambar .bmp kenapa g bisa disimpan di table. padahal gambarnya cuma 50KB. tipe data pada table nya sudah longblob… keluarnya pasti "mysql gone away".
Mas Andre, itu di artikelnya ada yang typo. harusnya BLOB bukan BLOG, di bagian tipe data BLOB MySQL
"Ukuran serta jangkauan dari BLOG…"
Wah iya, terimakasih koreksinya… segera di perbaiki.
kalo untuk password tipe data yang cocok apa?
Bantu jawab gan, kalo menurut saya tipe data yg cocok buat password itu pake char bukan varchar karena ditakutkan kalau pake varchar kemungkinan bisa ada tambahan karakter.
Dan karena kalau pakai tipe data char jumlah karakter yg digunakan sudah pasti, seperti nya akan meminimalisir kesalahan dlm penginputan.
Mungkin begitu ?
Mas Andre, di laptop saya ketika menampilkan isi table contoh_bin hasilnya seperti ini : 0x64756E6961 bukan menampilkan 'dunia'
Saya juga seperti ini, tapi hanya di Tipe Data Blob aja, yang lain normal, gimana ya mas Andre?
halo min, mau tanya kalo ada 2 kolom yg tipe data nya varchar, apakah bisa dibandingkan misal lebih dari atau kecil dari?
izin bertanya mas, untuk username dan password bagusnya pakai apa ya ? apakah varchar ?