Jika Anda pernah bekerja dengan MySQL, Anda pasti menemukan kumpulan karakter dan susunan. Dalam posting blog ini, kami akan mencoba memberi Anda pandangan yang lebih mendalam tentang keduanya dan bagaimana Anda harus menggunakannya.
Apa Itu Kumpulan Karakter dan Kumpulan?
Sederhananya, kumpulan karakter di MySQL adalah kumpulan simbol dan penyandian - susunan adalah kumpulan aturan untuk membandingkan karakter dalam kumpulan karakter. Dengan kata lain, kumpulan karakter adalah kumpulan karakter yang legal dalam sebuah string, sedangkan collations adalah seperangkat aturan yang digunakan untuk membandingkan karakter dalam kumpulan karakter tertentu. Bagaimana setiap set karakter memiliki susunan default, set karakter juga dapat memiliki beberapa susunan. MySQL memiliki kumpulan karakter dan susunan default untuk server dan juga untuk setiap database dan tabel.
Set Karakter di MySQL
Secara umum, set karakter di MySQL berfungsi seperti ini:
- Saat database dibuat, set karakter diturunkan dari variabel character_set_server di seluruh server.
- Saat sebuah tabel dibuat, kumpulan karakter diturunkan dari database.
- Saat kolom dibuat, kumpulan karakter diturunkan dari tabel.
Mengenai set karakter, ada beberapa variabel yang harus Anda perhatikan:
- Character_set_client mendefinisikan set karakter di mana pernyataan dikirim oleh klien.
- Character_set_connection mendefinisikan set karakter tempat pernyataan diterjemahkan setelah server menerima pernyataan dari klien.
- Character_set_results mendefinisikan set karakter tempat server mengembalikan hasil kueri ke klien.
Ketiga pengaturan ini dapat diubah dengan menggunakan pernyataan SET NAMES atau SET CHARACTER SET, atau bahkan dalam file konfigurasi MySQL.
Saat berurusan dengan kumpulan karakter terkadang Anda mungkin juga mengalami kesalahan #1267:
ERROR 1267 (HY000): Illegal mix of collations.
Galat di atas umumnya disebabkan oleh membandingkan dua string yang memiliki susunan yang tidak kompatibel atau dengan mencoba memilih data yang memiliki susunan berbeda ke dalam kolom gabungan. Kesalahan ditampilkan karena ketika MySQL membandingkan dua nilai dengan set karakter yang berbeda, itu harus mengubahnya menjadi set karakter yang sama untuk perbandingan, tetapi set karakter tidak kompatibel. Untuk mengatasi masalah ini, pastikan bahwa susunan setiap tabel dan kolomnya sama.
Kolasi di MySQL
Seperti yang telah disebutkan di atas, collation berkaitan erat dengan set karakter karena collation adalah seperangkat aturan yang mendefinisikan cara membandingkan dan mengurutkan string karakter. Setiap rangkaian karakter memiliki setidaknya satu susunan, beberapa juga memiliki lebih banyak.
Meskipun kita tidak akan membahas detail seluk beluk semua hal yang terkait dengan penyusunan di MySQL dalam posting blog ini, ada beberapa hal yang harus Anda ketahui:
- Jika Anda menggunakan MySQL 5.7, susunan default MySQL umumnya latin1_swedish_ci karena MySQL menggunakan latin1 sebagai set karakter default. Jika Anda menggunakan MySQL 8.0, charset default adalah utf8mb4.
- Jika Anda memilih untuk menggunakan UTF-8 sebagai susunan Anda, selalu gunakan utf8mb4 (khususnya utf8mb4_unicode_ci). Anda tidak boleh menggunakan UTF-8 karena UTF-8 MySQL berbeda dari pengkodean UTF-8 yang tepat. Ini terjadi karena tidak menawarkan dukungan unicode penuh yang dapat menyebabkan kehilangan data atau masalah keamanan. Ingatlah bahwa utf8mb4_general_ci adalah seperangkat aturan penyortiran yang disederhanakan yang menggunakan pintasan yang dirancang untuk meningkatkan kecepatan sementara utf8mb4_unicode_ci mengurutkan secara akurat dalam berbagai bahasa. Secara umum, utf8mb4 adalah kumpulan karakter "paling aman" karena juga mendukung unicode 4-byte sementara utf8 hanya mendukung hingga 3.
Memilih Kumpulan Karakter dan Koleksi yang Baik
Untuk memilih susunan dan kumpulan karakter yang baik untuk kumpulan data MySQL Anda, ingatlah untuk membuatnya tetap sederhana. Campuran set karakter yang berbeda dan (atau) susunan dapat menjadi sangat berantakan karena bisa sangat membingungkan (misalnya, semuanya mungkin berfungsi dengan baik sampai karakter tertentu muncul, dll.) jadi yang terbaik adalah mengevaluasi kebutuhan Anda terlebih dahulu dan memilih yang terbaik collation dan karakter set dimuka. MySQL juga memiliki beberapa kueri berharga yang dapat membantu Anda melakukannya, misalnya,
SELECT * FROM information_schema.CHARACTER_SETS ORDER BY CHARACTER_SET_NAME;
akan mengembalikan daftar kumpulan karakter dan susunan yang tersedia bersama dengan deskripsinya yang bisa sangat berguna jika Anda merencanakan desain basis data Anda.
Perlu diingat bahwa beberapa set karakter mungkin memerlukan lebih banyak operasi CPU, juga mungkin menghabiskan lebih banyak ruang penyimpanan. Menggunakan set karakter yang salah bahkan dapat mengalahkan pengindeksan - misalnya, MySQL harus mengonversi set karakter sehingga dapat membandingkannya ketika mereka tidak sama:konversi mungkin membuat tidak mungkin menggunakan indeks.
Juga, perlu diingat bahwa beberapa orang menyarankan "untuk hanya menggunakan UTF-8 secara global" - ini mungkin bukan ide yang bagus karena banyak aplikasi bahkan tidak memerlukan UTF-8 sama sekali dan, tergantung pada data Anda, UTF-8 dapat menyebabkan lebih banyak masalah daripada nilainya (misalnya, mungkin menggunakan lebih banyak ruang penyimpanan pada disk), jadi pilihlah dengan bijak.
Ringkasan
Kumpulan dan susunan karakter dapat menjadi teman Anda atau salah satu mimpi buruk Anda - semuanya tergantung pada bagaimana Anda menggunakannya. Secara umum, perlu diingat bahwa kumpulan karakter dan susunan yang "baik" bergantung pada data yang disimpan oleh basis data Anda - MySQL memang menyediakan beberapa pertanyaan untuk membantu Anda memutuskan apa yang akan digunakan, tetapi agar rangkaian karakter dan susunan Anda efektif, Anda juga harus berpikir tentang kapan masuk akal untuk menggunakan susunan tertentu dan mengapa.