Pertanyaan ini sudah memiliki banyak jawaban, tetapi Mathias Bynens menyebutkan bahwa 'utf8mb4' harus digunakan alih-alih 'utf8' agar mendapat dukungan UTF-8 yang lebih baik ('utf8' tidak mendukung karakter 4 byte, bidang terpotong saat disisipkan ). Saya menganggap ini sebagai perbedaan penting. Jadi di sini ada jawaban lain tentang cara mengatur set karakter standar dan pemeriksaan. Yang memungkinkan Anda untuk memasukkan tumpukan kotoran (💩).
Ini berfungsi pada MySQL 5.5.35.
Perhatikan, bahwa beberapa pengaturan mungkin opsional. Karena saya tidak sepenuhnya yakin bahwa saya belum melupakan apa pun, saya akan menjadikan ini sebagai wiki komunitas
Pengaturan Lama
mysql> SHOW VARIABLES LIKE 'char%'; SHOW VARIABLES LIKE 'collation%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | utf8_general_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)
Konfigurasi
# 💩 𝌆
# UTF-8 should be used instead of Latin1. Obviously.
# NOTE "utf8" in MySQL is NOT full UTF-8: http://mathiasbynens.be/notes/mysql-utf8mb4
[client]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
[mysql]
default-character-set = utf8mb4
Pengaturan Baru
mysql> SHOW VARIABLES LIKE 'char%'; SHOW VARIABLES LIKE 'collation%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
+----------------------+--------------------+
| Variable_name | Value |
+----------------------+--------------------+
| collation_connection | utf8mb4_general_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_server | utf8mb4_unicode_ci |
+----------------------+--------------------+
3 rows in set (0.00 sec)
character_set_system selalu utf8 .
Ini tidak akan mempengaruhi tabel yang ada, itu hanya pengaturan default (digunakan untuk tabel baru). Kode ALTER berikut dapat digunakan untuk mengonversi tabel yang ada (tanpa penyelesaian dump-restore):
ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Edit:
Pada server MySQL 5.0: character_set_client, character_set_connection, character_set_result, collation_connection tetap di latin1. Penerbitan SET NAMES utf8
(utf8mb4 tidak tersedia dalam versi itu) mengatur mereka juga untuk utf8.
Peringatan : Jika Anda memiliki tabel utf8 dengan kolom indeks tipe VARCHAR (255), dalam beberapa kasus tidak dapat dikonversi, karena panjang kunci maksimum terlampaui ( Specified key was too long; max key length is 767 bytes.
). Jika memungkinkan, kurangi ukuran kolom dari 255 menjadi 191 (karena 191 * 4 = 764 <767 <192 * 4 = 768). Setelah itu, tabel dapat dikonversi.
utf8mb4
, yaitu UTF-8 nyata dengan dukungan Unicode penuh. Lihat Cara mendukung Unicode penuh dalam database MySQL .