phpMyAdmin
 sql >> Database >  >> Database Tools >> phpMyAdmin

MySQL restituisce la codifica occidentale nel file PHP UTF-8

Usa mysqli_set_charset per cambiare la codifica del client in UTF-8 subito dopo la connessione:

$mysqli->set_charset("utf8");

La codifica del client è ciò in cui MySql si aspetta che sia il tuo input (ad esempio quando inserisci il testo fornito dall'utente in una query di ricerca) e ciò in cui ti dà i risultati (quindi deve corrispondere alla codifica di output per echo per visualizzare le cose correttamente).

Devi farlo corrispondere alla codifica della tua pagina web per tenere conto dei due scenari sopra e la codifica del file sorgente PHP (in modo che le parti codificate delle tue query siano interpretate correttamente).

Aggiornamento:come convertire i dati inseriti utilizzando latin-1 in utf-8

Per quanto riguarda i dati che sono già stati inseriti utilizzando la codifica di connessione errata, esiste una comoda soluzione per risolvere il problema. Per ogni colonna che contiene questo tipo di dati devi fare:

ALTER TABLE table_name MODIFY column_name existing_column_type CHARACTER SET latin1;
ALTER TABLE table_name MODIFY column_name BLOB;
ALTER TABLE table_name MODIFY column_name existing_column_type CHARACTER SET utf8;

I segnaposto table_name , column_name e existing_column_type deve essere sostituito ogni volta con i valori corretti dal database.

Quello che fa è

  1. Di' a MySql che deve memorizzare i dati in quella colonna in latin1. Questo set di caratteri contiene solo un piccolo sottoinsieme di utf8, quindi in generale questa conversione comporta la perdita di dati, ma in questo scenario specifico i dati erano già interpretati come latin1 in input, quindi non ci saranno effetti collaterali. Tuttavia, MySql convertirà internamente la rappresentazione in byte dei tuoi dati in modo che corrisponda a quanto originariamente inviato da PHP.
  2. Convertire la colonna in un tipo binario (BLOB ) che non ha informazioni di codifica associate. A questo punto la colonna conterrà byte grezzi che sono una stringa di caratteri utf8 appropriata.
  3. Convertire la colonna al tipo di carattere precedente, dicendo a MySql che i byte grezzi dovrebbero essere considerati nella codifica utf8.

AVVERTENZA:puoi utilizzare questo approccio indiscriminato solo se la colonna in questione contiene solo dati inseriti in modo errato. Tutti i dati inseriti correttamente verranno troncati alla prima occorrenza di qualsiasi carattere non ASCII!

Pertanto è una buona idea farlo subito, prima che la correzione laterale di PHP entri in vigore.