Mysql
 sql >> Database >  >> RDS >> Mysql

Caratteri speciali in PHP / MySQL

Vorrei solo fornire qualche dettaglio in più sulla soluzione proposta da Vartec che è (a seconda della tua installazione di MySQL) la soluzione più corretta al tuo problema. Prima di tutto il problema del set di caratteri / codifica in MySQL è un argomento alquanto complesso che è ampiamente trattato nel manuale MySQL Capitolo 9.1 "Supporto per set di caratteri" . Nel tuo caso in particolare 9.1.4. "Set di caratteri di connessione e regole di confronto" sarà più rilevante.

Per farla breve:MySQL deve sapere quale set di caratteri/codifica si aspetta la tua applicazione client (parlando dal database persoective che è il tuo script PHP) poiché transcodificherà tutti i dati della stringa dal set di caratteri/codifica interni definiti su server-, a livello di database, tabella o colonna nel set di caratteri di connessione/codifica. Stai usando UTF-8 sul lato client, quindi devi dire a MySQL che usi UTF-8. Questo viene fatto dal comando MySQL SET NAMES 'utf8' che deve essere inviata come prima richiesta all'apertura di una connessione. A seconda della tua installazione e della libreria client MySQL che usi nello script PHP, questo può essere fatto automaticamente ad ogni connessione.

Se usi PDO è solo questione di impostare un parametro di configurazione

$db = new PDO($dsn, $user, $password);
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");

Usare mysqli per cambiare il set di caratteri/codifica del client è ancora più semplice:

$mysqli = new mysqli("localhost", "user", "password", "db");
$mysqli->set_charset("utf8");

Spero che ciò contribuirà a rendere l'intera faccenda più comprensibile.