Cambia il set di caratteri predefinito di MySQL in UTF-8 in my.cnf?


334

Attualmente stiamo usando i seguenti comandi in PHP per impostare il set di caratteri su UTF-8 nella nostra applicazione.

Poiché si tratta di un po 'di sovraccarico, vorremmo impostarlo come impostazione predefinita in MySQL. Possiamo farlo in /etc/my.cnf o in un'altra posizione?

SET NAMES 'utf8'
SET CHARACTER SET utf8

Ho cercato un set di caratteri predefinito in /etc/my.cnf, ma non c'è nulla riguardo ai set di caratteri.

A questo punto, ho fatto quanto segue per impostare il set di caratteri MySQL e le variabili di confronto su UTF-8:

skip-character-set-client-handshake
character_set_client=utf8
character_set_server=utf8

È un modo corretto di gestirlo?


19
Si noti che sarebbe un valore predefinito migliore utf8mb4, ovvero UTF-8 reale con supporto Unicode completo. Vedi Come supportare Unicode completo nei database MySQL .
Mathias Bynens,

@Jorre ti opporresti a cambiarlo per essere utf8mb4questo tipo di un pericoloso precedente come si trova?
Evan Carroll,

Risposte:


424

Per impostare il valore predefinito su UTF-8, si desidera aggiungere quanto segue a my.cnf

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8


[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

Se vuoi cambiare il set di caratteri per un DB esistente, fammi sapere ... la tua domanda non l'ha specificato direttamente, quindi non sono sicuro che sia quello che vuoi fare.


18
Le precedenti impostazioni my.cnf hanno funzionato anche per me. Inoltre, ho dovuto assicurarmi che la tabella fosse impostata correttamente, come ALTER TABLE TableCONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Chris Livdahl,

8
Non funziona con mysql 5.5. Ho usato: <br/> [mysqld] # Modifiche per utf-8 collation-server = utf8mb4_unicode_ci init-connect = 'SET NAMES utf8mb4' character-set-server = utf8mb4 e utf8mb4 altrove come menzionato sopra.
Champ

12
Su Ubuntu 12.04, questo ha funzionato per me, se avessi rimosso la prima riga dopo [mysqld].
Brandon Bertelsen il

4
Sembra che il set di caratteri predefinito non sia più consentito nella sezione [mysqld]
marsbard

4
Nota che se UTF-8 è quello che vuoi, non usare il utf8set di caratteri MySQL . Usa utf8mb4invece.
Mathias Bynens,

255

Per la versione recente di MySQL,

default-character-set = utf8

causa un problema. Penso che sia deprecato.

Come dice Justin Ball in " Aggiorna a MySQL 5.5.12 e ora MySQL non si avvia , dovresti:

  1. Rimuovi quella direttiva e dovresti essere buono.

  2. Quindi il tuo file di configurazione ('/etc/my.cnf' per esempio) dovrebbe apparire così:

    [mysqld]
    collation-server = utf8_unicode_ci
    init-connect='SET NAMES utf8'
    character-set-server = utf8
  3. Riavvia MySQL.

  4. Per essere sicuro, il tuo MySQL è UTF-8, esegui le seguenti query nel tuo prompt di MySQL:

    • Prima query:

       mysql> show variables like 'char%';

      L'output dovrebbe apparire come:

       +--------------------------+---------------------------------+
       | Variable_name            | Value                           |
       +--------------------------+---------------------------------+
       | character_set_client     | utf8                            |
       | character_set_connection | utf8                            |
       | character_set_database   | utf8                            |
       | character_set_filesystem | binary                          |
       | character_set_results    | utf8                            |
       | character_set_server     | utf8                            |
       | character_set_system     | utf8                            |
       | character_sets_dir       | /usr/local/mysql/share/charsets/|
       +--------------------------+---------------------------------+
    • Seconda query:

       mysql> show variables like 'collation%';

      E l'output della query è:

       +----------------------+-----------------+
       | Variable_name        | Value           |
       +----------------------+-----------------+
       | collation_connection | utf8_general_ci |
       | collation_database   | utf8_unicode_ci |
       | collation_server     | utf8_unicode_ci |
       +----------------------+-----------------+

La tua prima riga max_allowed_packet = 64M è in qualche modo correlata a questo problema UTF8?
Malhal,

Io ho character_set_filesystem | utf8. Non sono sicuro, va bene?
zio Lem,

1
Provato su MariaDB v5.5 e funziona, grazie! mysql Ver 15.1 Distrib 5.5.35-MariaDB, for debian-linux-gnu (x86_64) using readline 5.1
cenk,

Penso che non sia necessario rimuoverlo default-character-set, invece è possibile passare a loose-default-character-set = utf8- vale a dire il prefisso con "loose-". Questo rende mysqlbinlogfelice, se è necessario usarlo - google per: mysqlbinlog "loose-default-character-set" .
KajMagnus,

È init-connect='SET NAMES utf8'davvero necessario? Altrimenti possiamo sicuramente farne a meno per le prestazioni.
datasn.io

56

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.


Ho seguito le tue impostazioni, ma trovo che character_set_databasesia ancora utf8ed collation_databaseè utf8_bin`. Ho dimenticato qualcosa?
Stewart,

Ho trovato quello che mi mancava. Queste 2 impostazioni vengono impostate quando viene creato il database stesso. Vedi questa domanda; stackoverflow.com/questions/22572558/…
Stewart

1
aggiungi character-set-client-handshake = FALSEalla sezione [mysqld], quindi userà sempre la codifica predefinita anche se commetterai un errore sul livello dell'applicazione
Lukas Liesis

ciao ho provato questa soluzione ma non riesco ancora a mostrare character_set_client | utf8mb4. è utf8. solo character_set_database utf8mb4 e character_set_server utf8mb4 sono utf8mb4 altri non modificati. Ti prego, aiutami
Bhavin Chauhan,

@ baic6 Suggerisco di aggiungere una nota che chiarisca perché solo le colonne indicizzate possono causare il problema. La limitazione di 767 byte è solo per le colonne indicizzate, coz la limitazione per le "chiavi". Per le colonne non indicizzate in generale, questo non si applica. Se una colonna avesse un valore con una lunghezza massima di byte, diciamo 255 caratteri e fossero usati i max 3 byte di utf8, avrebbe comunque bisogno solo di 255 * 3 byte, utf8mb4 in questi casi userà solo 3 byte, poiché questi caratteri anche in utf8mb4 servono solo 3 byte. Cioè, a meno che un personaggio che non rientri in utf8 sia stato memorizzato nella colonna, nel qual caso le informazioni sono già perse.
sam,

55

Su MySQL 5.5 ho in my.cnf

[mysqld] 
init_connect='SET collation_connection = utf8_unicode_ci' 
init_connect='SET NAMES utf8' 
character-set-server=utf8 
collation-server=utf8_unicode_ci 
skip-character-set-client-handshake

Il risultato è

mysql> show variables like "%character%";show variables like "%collation%";

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_unicode_ci |
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)

2
Cosa fa skip-character-set-client-handshakeesattamente e in quali circostanze è richiesto?
Simon East,

3
@Simon, quando usavo show variables like "%collation%";vedevo 'collation_connection' come utf8_general_cie collation_database e collation_server come utf8_unicode_ci. L'aggiunta della riga ha skip-character-set-client-handshakemodificato la voce generale in Unicode, quindi tutte e tre sono state coerenti.
Vaughany,

2
Su MySQL 5.6, l'handshake skip-character-set-client-doke non fa ciò che ha detto @Vaughany. Qualche suggerimento?
Ababneh,

4
Lo ha skip-character-set-client-handshakefatto per me (insieme a "character-set-server" e "collation-server", ovviamente - su Debian 7). Gli init_connects non hanno fatto differenza con o senza skipe sembrano ridondanti. +1 e grazie.
Jeff,

3
skip-character-set-client-handshake ignora le informazioni sul set di caratteri inviate dal client. È utile per forzare un set di caratteri specifico durante la comunicazione, ma se il client si aspetta qualcos'altro, potrebbe causare problemi. Direi che è meglio specificarlo sul client (la tua applicazione).
0b10011,

31

Nota: il file my.cnf si trova in/etc/mysql/

Dopo aver aggiunto queste righe:

[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
skip-character-set-client-handshake

[client]
default-character-set   = utf8

[mysql]
default-character-set   = utf8

Non dimenticare di riavviare il server:

sudo service mysql restart

2
Nota: questo cambia i valori predefiniti; esso non cambia la codifica per le colonne esistenti.
Rick James,

24

NijaCat era vicino, ma ha specificato overkill:

Per impostare il valore predefinito su UTF-8, si desidera aggiungere quanto segue a my.cnf

[client]
default-character-set=utf8

[mysqld]
default-character-set = utf8

Quindi, per verificare:

mysql> show variables like "%character%";show variables like "%collation%";

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| 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   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)

5
Bella risposta. Forse una breve spiegazione su quali parti sono eccessive aiuterebbe le persone a decidere esattamente cosa vogliono nella loro configurazione.
Mike Samuel,

@Derek, cosa fa [mysql] default-character-set=utf8allora?
Pacerier,

1
Il gruppo di opzioni [client] imposta già le opzioni per tutti i client MySQL che leggono il file my.cnf. Il gruppo [mysql] imposta le opzioni solo per il binario del client "mysql", in particolare. Se si desidera impostare un'opzione mysql che non si applica ad altri client, l'utilizzo di questo gruppo è appropriato, ma l'impostazione dello stesso valore di opzione in entrambe le posizioni è ridondante. dev.mysql.com/doc/refman/5.6/en/option-files.html
Derek

@Mike Samuel, l'impostazione del set di caratteri predefinito su utf8 implica già la modalità di confronto predefinita di utf8_general_ci. D'altra parte, "init-connect = 'SET NAMES utf8'" è un'idea piuttosto interessante, in quanto tenta di forzare tutti i client che si connettono al server a utilizzare utf8, ma questo viene applicato in modo incoerente a seconda dei privilegi di connessione della connessione utente e sospetto che alcuni client di terze parti in connessione potrebbero essere confusi quando il server sovrascrive il set di caratteri richiesto. dev.mysql.com/doc/refman/5.6/en/charset-applications.html
Derek

Da [mysqld]utilizzare al character-set-serverposto didefault-character-set
Rick James,

23

Ho anche scoperto che dopo aver impostato default-character-set = utf8sotto [mysqld]il titolo, MySQL 5.5.x non partiva sotto Ubuntu 12.04 (Precise Pangolin).


16
Questo è il bug MySQL # 52047 . Sotto [mysqld], dovresti usare character-set-serverinvece di default-character-set. (Estremamente confuso, sono d'accordo!)
Mathias Bynens,

Sì. Obsoleto in 5.0; rimosso in 5.5.
Rick James,

22

MySQL v5.5.3 e versioni successive:

Aggiungi tre righe solo nella sezione [mysqld]:

[mysqld]
character-set-server = utf8
collation-server = utf8_unicode_ci
skip-character-set-client-handshake

Nota: Compreso skip-character-set-client-handshakequi evita la necessità di includere sia init-connectin [mysqld]e default-character-setnelle [client]e [mysql]sezioni.


1
Caspita, tante risposte duplicate a questa domanda, eppure questa sembra essere la più semplice. Funziona anche per me su v5.5.44.
Justin Watt,

9

Sotto Xubuntu 12.04 ho semplicemente aggiunto

[mysqld]
character_set_server = utf8

a /etc/mysql/my.cnf

E il risultato è

mysql> show variables like "%character%";show variables like "%collation%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| 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   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)

Dai anche un'occhiata a http://dev.mysql.com/doc/refman/5.6/en/charset-server.html


È inoltre necessario [client] default-character-set = utf8, altrimenti quando si utilizza mysql dalla riga di comando, non verrà utilizzato utf8 potenzialmente distruggendo tutti i backup che si esegue il pipe su file.
Malhal,

9

Tutte le impostazioni elencate qui sono corrette, ma qui sono la soluzione più ottimale e sufficiente:

[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
character-set-server = utf8
collation-server = utf8_unicode_ci

[client]
default-character-set = utf8

Aggiungi questi a /etc/mysql/my.cnf.

Nota, ho scelto il tipo di fascicolazione utf8_unicode_ci a causa del problema di prestazioni.

Il risultato è:

mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_unicode_ci |
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+

E questo è quando ti connetti come utente non SUPER !

Ad esempio, la differenza tra la connessione come utente SUPER e non SUPER (ovviamente in caso di confronto utf8_unicode_ci ):

utente con SUPER priv .:

mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci | <---
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+

utente con privilegio non SUPER :

mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_unicode_ci |
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+

Ho scritto un articolo completo (rus) che spiega in dettaglio perché dovresti usare l'una o l'altra opzione. Vengono considerati tutti i tipi di set di caratteri e regole di confronto : per server, per database, per connessione, per tabella e persino per colonna.

Lo spero e l'articolo contribuirà a chiarire i momenti poco chiari.


3
Vorrei poter leggere il tuo articolo collegato, ma non riesco a leggere il russo e Google Translate non è così utile per i testi tecnici. Da quello che posso dire, sarebbe molto interessante. Potresti considerare di pubblicare una versione inglese?
Martijn Heemels,

2
Potresti spiegare quale impostazione non riesce a impostare le regole di confronto connessioni utenti SUPER? (ed esiste una soluzione)
KCD,

@gahcep, hai dichiarato di utilizzare a utf8_unicode_cicausa di problemi di prestazioni, quindi perché non utilizzare utf8_bininvece?
Pacerier,

Ciao Paceriar. Buon punto. Ora non sono sicuro che la mia scelta sia stata corretta sull'uso utf8_unicode_ci. Non ho mai trascorso del tempo a testare le prestazioni.
gahcep,


4

Le versioni di MySQL e le distribuzioni Linux possono essere importanti quando si effettuano le configurazioni.

Tuttavia, le modifiche alla [mysqld]sezione sono incoraggiate.

Voglio dare una breve spiegazione della risposta di Tomazzlender:

[mysqld] 
init_connect='SET collation_connection = utf8_unicode_ci' 
init_connect='SET NAMES utf8' 
character-set-server=utf8 
collation-server=utf8_unicode_ci 
skip-character-set-client-handshake

[Mysqld]

Questo cambierà collation_connection in utf8_unicode_ci

init_connect='SET collation_connection = utf8_unicode_ci'

Utilizzando SET NAMES:

init_connect='SET NAMES utf8'

SET NAMES influenzerà tre personaggi, ovvero:

character_set_client
character_set_results
character_set_connection

Questo imposterà character_set_database & character_set_server

character-set-server=utf8

Ciò riguarderà solo collation_database & collation_server

collation-server=utf8_unicode_ci

Mi dispiace, non sono sicuro di cosa sia questo. Non lo uso comunque:

skip-character-set-client-handshake

Le note di documentazione che character_set_servernon devono essere impostate manualmente.
Brian,

Allora, qual è l'approccio all'avanguardia? Possiamo passare esplicitamente character setquando si stabilisce la connessione al database, tuttavia sembra un po 'fastidioso.
Lihang Li

In realtà ho fatto un errore. La documentazione dice che character_set_database non dovrebbe essere impostato in modo dinamico. Non menziona character_set_server. Tuttavia, non sono sicuro che devi preoccuparti di character_set_server, poiché penso che influisca solo sul valore predefinito per un database appena creato?
Brian,

Come ho detto sopra e ho ripetuto l'esperimento proprio ora, character_set_servernella [mysqld]sezione interesseràcharacter_set_database e character_set_server. Ora penso che una buona pratica sia quella di sottolineare esplicitamente character setciò che si desidera utilizzare durante la creazione di un database, una tabella e una connessione al database. Onestamente, la documentazione di mysqlnon è così facilmente comprensibile. Sai se esiste un modo generico per eseguire tutte le impostazioni character sete collationin mysql?
Lihang Li,

4

Su Fedora 21

$ vi /etc/my.cnf

Aggiungi follow:

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci 
skip-character-set-client-handshake

Salva ed esci.

Ricordati di riavviare il servizio mysqld con service mysqld restart.


1

MySQL 5.5, tutto ciò che serve è:

[mysqld]
character_set_client=utf8
character_set_server=utf8
collation_server=utf8_unicode_ci

collation_server è facoltativo.

mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

1

Se hai problemi a confermare il supporto del set di caratteri del client usando MySQL Workbench, tieni a mente la seguente nota:

Importante Tutte le connessioni aperte da MySQL Workbench impostano automaticamente il set di caratteri client su utf8. La modifica manuale del set di caratteri del client, come l'utilizzo di SET NAMES ..., può causare la mancata corretta visualizzazione dei caratteri da parte di MySQL Workbench. Per ulteriori informazioni sui set di caratteri del client, vedere Set di caratteri e regole di confronto.

Quindi non sono stato in grado di ignorare i set di caratteri di MySQL Workbench con le modifiche my.cnf. ad es. 'imposta nomi utf8mb4'


1

Se si è confusi dalle impostazioni per client e conn viene reimpostato dopo il riavvio del servizio mysql. Prova questi passaggi (che ha funzionato per me):

  1. vi /etc/my.cnf
  2. aggiungere il contenuto soffiare e :wq [client] character-sets-dir=/usr/local/mysql/share/mysql/charsets
  3. riavvia mysql e accedi a mysql, usa il database, inserisci il comando status;, troverai il set di caratteri per 'client' e 'conn' è impostato su 'utf8'.

Controlla il riferimento per maggiori informazioni.


0

Puoi farlo nel modo in cui funziona e, se non funziona, devi riavviare mysql.


-1

Cambia carattere MySQL:

Cliente

default-character-set=utf8

mysqld

character_set_server=utf8

Non dovremmo scrivere default-character-set=utf8in mysqld, perché ciò potrebbe causare un errore del tipo:

inizio: avvio del processo non riuscito

Alla fine:

 +--------------------------+----------------------------+
 | Variable_name            | Value                      |
 +--------------------------+----------------------------+
 | character_set_client     | utf8                       |
 | character_set_connection | utf8                       |
 | character_set_database   | utf8                       |
 | character_set_filesystem | binary                     |
 | character_set_results    | utf8                       |
 | character_set_server     | utf8                       |
 | character_set_system     | utf8                       |
 | character_sets_dir       | /usr/share/mysql/charsets/ |
 +--------------------------+----------------------------+
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.