To pytanie ma już wiele odpowiedzi, ale Mathias Bynens wspomniał, że zamiast utf8 należy użyć „utf8mb4”, aby uzyskać lepszą obsługę UTF-8 („utf8” nie obsługuje 4-bajtowych znaków, pola są obcinane przy wstawianiu ). Uważam to za ważną różnicę. Oto kolejna odpowiedź na temat ustawiania domyślnego zestawu znaków i sortowania. Taki, który pozwoli Ci wstawić kupkę kupki (💩).
Działa to na MySQL 5.5.35.
Pamiętaj, że niektóre ustawienia mogą być opcjonalne. Ponieważ nie jestem do końca pewien, że niczego nie zapomniałem, zrobię z tej odpowiedzi wiki społeczności.
Stare ustawienia
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)
Config
# 💩 𝌆
# 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
Nowe ustawienia
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 to zawsze utf8 .
Nie wpłynie to na istniejące tabele, jest to tylko ustawienie domyślne (używane w nowych tabelach). Do konwersji istniejącej tabeli można użyć następującego kodu ALTER (bez obejścia przywracania zrzutu):
ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Edytować:
Na serwerze MySQL 5.0: character_set_client, character_set_connection, character_set_results, collation_connection pozostają na latin1. Wystawianie SET NAMES utf8
(utf8mb4 niedostępne w tej wersji) ustawia je również na utf8.
Uwaga : Jeśli masz tabelę utf8 z kolumną indeksu typu VARCHAR (255), w niektórych przypadkach nie można jej przekonwertować, ponieważ maksymalna długość klucza została przekroczona ( Specified key was too long; max key length is 767 bytes.
). Jeśli to możliwe, zmniejsz rozmiar kolumny z 255 do 191 (ponieważ 191 * 4 = 764 <767 <192 * 4 = 768). Następnie tabelę można przekonwertować.
utf8mb4
, tj. Prawdziwy UTF-8 z pełną obsługą Unicode. Zobacz Jak obsługiwać pełny Unicode w bazach danych MySQL .