Bu sorunun zaten çok fazla cevabı var, ancak Mathias Bynens, daha iyi UTF-8 desteğine sahip olmak için 'utf8' yerine 'utf8mb4' kullanılması gerektiğini belirtti ('utf8' 4 bayt karakteri desteklemiyor , ekler üzerinde alanlar kesiliyor ). Bunun önemli bir fark olduğunu düşünüyorum. Burada, varsayılan karakter kümesinin ve harmanlamanın nasıl ayarlanacağıyla ilgili başka bir cevap var. Bir yığın kaka (💩) eklemenizi sağlayacak.
Bu MySQL 5.5.35 üzerinde çalışır.
Bazı ayarların isteğe bağlı olabileceğini unutmayın. Hiçbir şeyi unutmadığımdan tam olarak emin olmadığım için, bu yanıtı bir topluluk wiki'si yapacağım.
Eski Ayarlar
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)
Yapılandırma
# 💩 𝌆
# 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
Yeni Ayarlar
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 her zaman utf8'dir .
Bu mevcut tabloları etkilemez, sadece varsayılan ayardır (yeni tablolar için kullanılır). Aşağıdaki ALTER kodu var olan bir tabloyu dönüştürmek için kullanılabilir (döküm geri yükleme geçici çözümü olmadan):
ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Düzenle:
MySQL 5.0 sunucusunda: character_set_client, character_set_connection, character_set_results, collation_connection latin1'de kalır. Düzenleyen SET NAMES utf8
(bu sürümde mevcut değildir utf8mb4) utf8 olanlar yanı ayarlar.
Uyarı : VARCHAR (255) türünde bir dizin sütunu olan bir utf8 tablonuz varsa, bazı durumlarda dönüştürülemez, çünkü maksimum anahtar uzunluğu aşılmıştır ( Specified key was too long; max key length is 767 bytes.
). Mümkünse, sütun boyutunu 255'ten 191'e düşürün (çünkü 191 * 4 = 764 <767 <192 * 4 = 768). Bundan sonra, tablo dönüştürülebilir.
utf8mb4
, yani tam Unicode desteği olan gerçek UTF-8 olacağını unutmayın . Bkz . MySQL veritabanlarında tam Unicode desteği .