Tutorial Belajar MySQL Part 14: Tipe Data String (Huruf) MySQL

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:

DataCHAR(5)Ukuran PeyimpananVARCHAR(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)
Sama seperti tipe data integer, sebelum mendefinisikan suatu kolom dengan CHAR(10) atau VARCHAR(10), sedapat mungkin kita sudah memprediksi data yang akan diinput kedalam kolom tersebut. Apakah 10 karakter cukup untuk menampung seluruh data yang akan diisi, atau apakah terdapat kemungkinan data yang diinput akan berisi 15 karakter.

Merubah tipe kolom setelah implementasi akan membutuhkan usaha yang lebih dari pada memprediksinya di awal perancangan database.


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 DataUkuran MaksimumJumlah Karakter Maksimum
TINYTEXT255 byte255
TEXT65.535 byte (64 KB)6.5535
MEDIUMTEXT16.777.215 byte (16MB)16.777.215
LONGTEXT4.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 DataUkuran MaksimumJumlah Karakter Maksimum
TINYBLOB255 byte255
BLOB65.535 byte (64 KB)65.535
MEDIUMBLOB16.777.215 byte (16MB)16.777.215
LONGBLOB4.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.

54 Comments

  1. trian
    05 Feb 14
    • Andre
      22 Feb 14
  2. Rights
    13 Apr 14
    • NtestAja
      12 Sep 18
  3. Adi
    02 May 14
    • ryokyong
      28 May 14
    • Ibnu Toha
      07 Dec 14
    • Andre
      26 Jan 16
      • Anonymous
        23 Apr 16
  4. dedy
    01 Dec 14
    • Andre
      02 Dec 14
  5. masbroh
    09 Feb 15
    • Andre
      10 Feb 15
  6. david cornelius
    26 Apr 15
  7. Anonymous
    12 Nov 15
    • Andre
      15 Nov 15
  8. Rose
    26 Jan 16
    • Andre
      26 Jan 16
  9. rusadi
    27 Sep 16
    • Andre
      28 Sep 16
  10. Zuhdi ABE
    19 Apr 17
    • Andre
      20 Apr 17
  11. Gilang Arizona
    27 Apr 17
    • Andre
      29 Apr 17
  12. wahyu
    01 May 17
    • Andre
      02 May 17
  13. Frans
    04 May 17
    • Andre
      05 May 17
  14. Ruri Alfaza
    15 May 17
  15. Sabil
    19 Mar 18
    • Andre
      20 Mar 18
  16. Redo
    06 Apr 18
    • Andre
      08 Apr 18
  17. Ari
    22 Jun 18
  18. taurus
    30 Mar 19
    • Andre
      01 Apr 19
  19. Anonymous
    01 Feb 20
  20. Ani
    20 Apr 20
  21. Axel
    21 Aug 20
    • Yusuf
      21 Feb 21
      • Andre
        21 Feb 21
        • Ryan
          30 Jun 21
        • Philips
          10 Sep 21
  22. Wahyu Handayani
    19 Dec 20
  23. Rafiqi
    21 Dec 20
    • Andre
      21 Feb 21
  24. anonymouse
    30 Apr 21
  25. Utami
    13 Oct 21
  26. Johan
    23 Oct 21
    • Anonymous
      18 Sep 23
  27. budi aja
    02 Mar 22
  28. nafis
    22 Jul 22

Add Comment