Domanda

Una delle risposte a una domanda che ho posto ieri mi ha suggerito di assicurarmi che il mio database sia in grado di gestire correttamente i caratteri UTF-8. Come posso farlo con MySQL?

È stato utile?

Soluzione

Aggiornamento:

Risposta breve - Dovresti quasi sempre utilizzare il utf8mb4 set di caratteri e utf8mb4_unicode_ci regole di confronto.

Per modificare il database:

ALTER DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Vedi:

Risposta originale:

MySQL 4.1 e versioni successive hanno un set di caratteri predefinito UTF-8. Puoi verificarlo nel tuo my.cnf file, ricordati di impostare sia client che server (default-character-set e character-set-server).

Se disponi di dati esistenti che desideri convertire in UTF-8, scarica il database e importalo nuovamente come UTF-8 assicurandoti:

  • usa SET NAMES utf8 prima di eseguire una query / inserimento nel database
  • usa DEFAULT CHARSET=utf8 quando crei nuove tabelle
  • a questo punto il tuo client e server MySQL dovrebbe essere in UTF-8 (vedi <=>). ricorda che tutte le lingue che usi (come PHP) devono essere anche UTF-8. Alcune versioni di PHP useranno la propria libreria client MySQL, che potrebbe non essere a conoscenza di UTF-8.

Se vuoi migrare i dati esistenti ricordati di fare prima il backup! Un sacco di strane parti di dati possono accadere quando le cose non vanno come previsto!

Alcune risorse:

Altri suggerimenti

Per renderlo 'permanente', in my.cnf:

[client]
default-character-set=utf8
[mysqld]
character-set-server = utf8

Per verificare, vai al client e mostra alcune variabili:

SHOW VARIABLES LIKE 'character_set%';

Verifica che siano tutti utf8, tranne ..._filesystem, che dovrebbero essere binary e ..._dir, che indicano un punto da qualche parte nell'installazione di MySQL.

MySQL 4.1 e versioni successive hanno un set di caratteri predefinito che chiama utf8 ma che in realtà è solo un sottoinsieme di UTF-8 (consente solo caratteri a tre byte e più piccoli).

Usa utf8mb4 come set di caratteri se vuoi " full " UTF-8.

La risposta breve: usa utf8mb4 in 4 posizioni:

  • I byte nel tuo client sono utf8, non latin1 / cp1251 / etc.
  • SET NAMES utf8mb4 o qualcosa di equivalente quando si stabilisce la connessione del client a MySQL
  • CHARACTER SET utf8mb4 su tutte le tabelle / colonne - tranne le colonne che sono rigorosamente ascii / hex / country_code / zip_code / ecc.
  • <meta charset charset=UTF-8> se stai eseguendo l'output in HTML. (Sì, l'ortografia è diversa qui.)

Ulteriori informazioni ;
UTF8 fino in fondo

I link sopra riportati forniscono la " è necessaria una risposta canonica dettagliata per rispondere a tutte le preoccupazioni " ;. - C'è un limite di spazio su questo forum.

Modifica

Oltre a COLLATION utf8mb4_unicode_520_ci contenente " tutti " personaggi del mondo, <=> è discutibile la migliore collazione "all-around" da usare. (Esistono anche raccolte turche, spagnole, ecc. Per chi desidera le sfumature in quelle lingue.)

Il set di caratteri è una proprietà del database (impostazione predefinita) e della tabella. Puoi dare un'occhiata (comandi MySQL):

show create database foo; 
> CREATE DATABASE  `foo`.`foo` /*!40100 DEFAULT CHARACTER SET latin1 */

show create table foo.bar;
> lots of stuff ending with
> ) ENGINE=InnoDB AUTO_INCREMENT=252 DEFAULT CHARSET=latin1

In altre parole; è abbastanza facile controllare il set di dati del database o modificarlo:

ALTER TABLE `foo`.`bar` CHARACTER SET utf8;

Per modificare la codifica del set di caratteri in UTF-8 per il database stesso, digitare il comando seguente in mysql > richiesta. USA ALTER DATABASE .. Sostituisci DBNAME con il nome del database:

ALTER DATABASE DBNAME CHARACTER SET utf8 COLLATE utf8_general_ci;

Questo è un duplicato di questa domanda Come convertire un intero set di caratteri e regole di confronto di un database MySQL in UTF-8?

Ho seguito la soluzione di Javier, ma ho aggiunto alcune righe diverse in my.cnf:

[myslqd]
skip-character-set-client-handshake
collation_server=utf8_unicode_ci
character_set_server=utf8 

Ho trovato questa idea qui: http: // dev. mysql.com/doc/refman/5.0/en/charset-server.html nel primo / unico commento dell'utente nella parte inferiore della pagina. Egli menziona che skip-character-set-client-handshake ha una certa importanza.

Questi suggerimenti su MySQL e UTF-8 possono essere utili . Sfortunatamente, non costituiscono una soluzione completa, ma solo gotcha comuni.

Imposta database collation su UTF-8 quindi applica table collation al valore predefinito del database.

La tua risposta è che puoi configurare da Impostazioni MySql. Nella mia risposta potrebbe essere qualcosa che è andato fuori dal contesto, ma questo è anche sapere che è di aiuto per te.
   come configurare Character Set e Collation .

  

Per le applicazioni che memorizzano dati utilizzando il set di caratteri MySQL predefinito   e regole di confronto (latin1, latin1_swedish_ci), nessuna configurazione speciale   dovrebbe essere necessario. Se le applicazioni richiedono l'archiviazione dei dati utilizzando a   set di caratteri o regole di confronto diversi, è possibile configurare il set di caratteri   informazioni in vari modi:

  • Specifica le impostazioni dei caratteri per database. Ad esempio, applicazioni che utilizzano un database potrebbe richiedere utf8, mentre le applicazioni che utilizzare un altro database potrebbe richiedere sjis.
  • Specifica le impostazioni dei caratteri all'avvio del server. Ciò causa il server per utilizzare le impostazioni fornite per tutte le applicazioni che non ne fanno altre accordi.
  • Specifica le impostazioni dei caratteri al momento della configurazione , se costruisci MySQL dalla fonte. Questo fa sì che il server utilizzi le impostazioni fornite per tutti applicazioni, senza doverle specificare all'avvio del server.

Gli esempi mostrati qui per la tua domanda per impostare il set di caratteri utf8, qui anche impostare la fascicolazione per una maggiore utilità (utf8_general_ci fascicolazione`).

Specifica le impostazioni dei caratteri per database

  CREATE DATABASE new_db
  DEFAULT CHARACTER SET utf8
  DEFAULT COLLATE utf8_general_ci;

Specifica le impostazioni dei caratteri all'avvio del server

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

Specifica le impostazioni dei caratteri al momento della configurazione di MySQL

shell> cmake . -DDEFAULT_CHARSET=utf8 \
           -DDEFAULT_COLLATION=utf8_general_ci

Per vedere i valori del set di caratteri e le variabili del sistema di confronto che si applicano alla tua connessione, usa queste istruzioni:

SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';

Questa potrebbe essere una risposta lunga ma c'è tutto, puoi usarla. Spero che la mia risposta sia utile per te. per ulteriori informazioni http://dev.mysql.com/doc/ refman / 5.7 / en / charset-applications.html

SET NAMES UTF8

Questo è il trucco

CONNESSIONE DATABASE A UTF-8

$connect = mysql_connect('$localhost','$username','$password') or die(mysql_error());
mysql_set_charset('utf8',$connect);
mysql_select_db('$database_name','$connect') or die(mysql_error());

Imposta la tua connessione al database su UTF8:

  if($handle = @mysql_connect(DB_HOST, DB_USER, DB_PASS)){          
         //set to utf8 encoding
         mysql_set_charset('utf8',$handle);
  }

È stato in grado di trovare una soluzione. Esegui quanto segue in http://technoguider.com/2015/ 05 / utf8-set-up-in-mysql /

SET NAMES UTF8;
set collation_server = utf8_general_ci;
set default-character-set = utf8;
set init_connect = ’SET NAMES utf8′;
set character_set_server = utf8;
set character_set_client = utf8;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top