Questa domanda ha già molte risposte, ma Mathias Bynens ha detto che 'utf8mb4' dovrebbe essere usato al posto di 'utf8' per avere un migliore supporto UTF-8 ('utf8' non supporta i caratteri a 4 byte, i campi sono troncati all'insert ). Ritengo che questa sia una differenza importante. Quindi ecco un'altra risposta su come impostare il set di caratteri predefinito e le regole di confronto. Uno che ti permetterà di inserire un mucchio di cacca (💩).
Funziona su MySQL 5.5.35.
Si noti che alcune delle impostazioni potrebbero essere opzionali. Poiché non sono del tutto sicuro di non aver dimenticato nulla, trasformerò questa risposta in un wiki della comunità.
Vecchie impostazioni
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
Nuove impostazioni
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 è sempre utf8 .
Ciò non influirà sulle tabelle esistenti, è solo l'impostazione predefinita (utilizzata per le nuove tabelle). Il seguente codice ALTER può essere utilizzato per convertire una tabella esistente (senza la soluzione alternativa dump-restore):
ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Modificare:
Su un server MySQL 5.0: character_set_client, character_set_connection, character_set_results, collation_connection rimangono su latin1. L'emissione SET NAMES utf8
(utf8mb4 non disponibile in quella versione) imposta anche quelli su utf8.
Avvertenza : se si disponeva di una tabella utf8 con una colonna indice di tipo VARCHAR (255), in alcuni casi non può essere convertita, poiché la lunghezza massima della chiave viene superata ( Specified key was too long; max key length is 767 bytes.
). Se possibile, ridurre le dimensioni della colonna da 255 a 191 (perché 191 * 4 = 764 <767 <192 * 4 = 768). Successivamente, la tabella può essere convertita.
utf8mb4
, ovvero UTF-8 reale con supporto Unicode completo. Vedi Come supportare Unicode completo nei database MySQL .