Cara menggunakan mysql change default charset

Artikel ini untuk mengatasi masalah yang sama dengan artikel “Mengatasi Masalah Error #1273 – Unknown collation: ‘utf8mb4_unicode_ci” . Kali ini untuk menyelesaikannya, kita memanfaatkan fitur yang ada di PhpMyAdmin. Di sini, kita bisa melakukan perubahan collation baik untuk database ataupun untuk masing-masing tabel.

Cara menggunakan mysql change default charset

 

Sebetulnya, Apa itu Collation dan Character Set?

Jadi, MySql itu sebetulnya akan menyimpan serta memproses data kita dalam beragam bahasa menggunakan beberapa jenis character set. Untuk beberapa operasi, seperti membandingkan 2 string, MySql menggunakan seperangkat aturan untuk menentukan kesamaan dan juga melakukan pengurutan. Seperangkat aturan ini disebut juga dengan Collation.

Bagi Anda yang menggunakan phpMyAdmin, anda bisa mengubah collation dari character set yang ingin kita terapkan pada data string, baik untuk database maupun untuk masing-masing tabel. Fitur yang kita gunakan adalah fitur “Operation”.

Klien mengalami masalah saat memindahkan database dari development server ke production server. Pada developmen server menggunakan penyortiran utf8mb4, sedangkan pada production hanya support utf8. Error pun terjadi ketika hendak impor sql di production server seperti pada gambar di atas. Kami sudah melakukan konversi secara manual, namun tidak berhasil. Lantas apa perbedaan antara utf8mb4 dan utf8?

utf8mb4 (disebut juga standard UTF-8) dapat menyimpan secara langsung suatu karakter yang ditentukan oleh Unicode, yang pertama adalah ukuran tetap pada 4 byte per karakter sedangkan yang terakhir adalah antara 1 dan 4 byte per karakter

utf8 hanya dapat menyimpan pertama 65.536 codepoints, yang akan mencakup CJVK (Cina, Jepang, Vietnam, Korea), dan menggunakan 1 sampai 3 byte per karakter.

Jadi yang perlu kami lakukan yakni dengan ALTER database beserta setiap tabel di dalamnya untuk mengubah set karakter (charset). Dengan menggunakan script PHP berikut proses konversi akan menjadi lebih mudah. Proses konversi database MySQL dari utf8mb4_unicode_ci ke utf8_general_ci berjalan dengan cepat.

<?php
$dbname = 'your-database-name';
mysql_connect('your-database-hostname', 'your-database-username', 'your-database-password');
mysql_query("ALTER DATABASE `$dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci");
$result = mysql_query("SHOW TABLES FROM `$dbname`");
while($row = mysql_fetch_row($result)) {
 $query = "ALTER TABLE {$dbname}.`{$row[0]}` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci";
 mysql_query($query);
 $query = "ALTER TABLE {$dbname}.`{$row[0]}` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci";
 mysql_query($query);
}
echo 'All the tables have been converted successfully';
?>

  1. Copy PHP script di atas dan buat file dengan nama misalnya ‘dbconversion.php’.
  2. Upload file dbconversion.php ke server (development/production).
  3. Jalankan script dari ‘mydomain.com/dbconversion.php’.
  4. Setelah muncul pesan "All the tables have been converted successfully" maka proses konversi utfmb4 ke utf8 berjalan dengan baik.

Note:

Script di atas hanya berlaku untuk database mysql, jika Anda menggunakan mysqli maka cukup tambahkan parameter pada mysqli_query() menjadi:

Untuk membuat database hanya diperlukan baris pertama, untuk baris kedua jika sekalian diberikan hak akses ke user tertentu, jika tidak diberikan, default setting koneksi nama_user nya "root" dan passwordnya kosong selama masih di localhost.

Untuk menjelaskan apa itu UTF8 akan cukup panjang, tapi secara singkat gini, penulisan huruf kan ada banyak cara ni di setiap negara, kebanyakan adalah tulisan latin a-z A-Z 0-9, akan tetapi ada bahasa yang tidak menggunakan tulisan itu seperti tulisan Arab, Jepang, Korea, China yang tulisannya kalo tidak pernah belajar kita mengeja saja juga tidak akan bisa, lha untuk MySQL dapat menuliskan huruf-huruf itu ke database diperlukan si Character Set ini, salah satunya adalah UTF8.

Gimana untuk penjelasan sedikit tentang Character Set UTF8 udah sedikit mengerti ya. untuk panjang lebarnya dan lebih ke teknisnya dapat dilihat semisal disini dev.mysql.com dan disini id.wikipedia.org

Sedikit lagi mumpung ingat, akhiran _ci pada utf8_general_ci menandakan bahwa data yang disimpan akan bersifat Case Insensitive atau tidak membedakan huruf besar dan kecil semisal pada proses pencarian.

Selain sintax SQL diatas dapat juga digunakan sintax SQL dibawah:

CREATE SCHEMA `nama_database` CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANT ALL ON `nama_database`.* TO `nama_user`@localhost IDENTIFIED BY 'password_user';

CREATE SCHEMA ini merupakan sinonim dari CREATE DATABASE, referensinya dapat dilihat disini.

Just it, kita sudah membuat databse dengan Charset UTF8 dan Collation UTF8_general_ci, langkah selanjutnya tinggal membuat tabel-tabel sesuai kebutuhan. Caranya mudah juga, sekilas dapat dilihat dibawah.