get_charset
Scopri la funzione mysqli_get_charset() in PHP per restituire il set di caratteri della connessione al database MySQL.
La funzione mysqli_get_charset() restituisce il set di caratteri che PHP sta utilizzando per una determinata connessione MySQL — ad esempio utf8mb4, latin1 o utf8. Conoscere il charset attivo è importante perché controlla come il testo viene codificato tra PHP e MySQL: un charset errato trasforma lettere accentate, emoji e script non latini in "mojibake" illeggibile, ed è una classica causa di caratteri ? nei dati memorizzati.
Questo articolo spiega cosa restituisce la funzione, come leggere ogni campo del risultato e le ragioni pratiche per cui la utilizzeresti.
Sintassi
mysqli_get_charset(mysqli $mysql): ?objectNello stile orientato agli oggetti la stessa funzione è disponibile come metodo $mysqli->get_charset().
$mysql— una connessione restituita damysqli_connect().- Valore restituito — un object
stdClassche descrive il set di caratteri della connessione, oppurenullse il charset non può essere determinato.
Cosa contiene l'object restituito
A differenza delle funzioni che restituiscono una semplice string, mysqli_get_charset() restituisce un object con diversi campi. Quelli più utili sono:
| Proprietà | Significato |
|---|---|
charset | Il nome del set di caratteri, es. utf8mb4. |
collation | La collation, es. utf8mb4_general_ci. |
dir | Directory del charset (spesso vuota nelle build moderne). |
min_length | Numero minimo di byte per carattere. |
max_length | Numero massimo di byte per carattere (4 per utf8mb4). |
number | ID interno del charset MySQL. |
state | Flag interni dello stato del charset. |
Utilizzo di base
Chiama la funzione su una connessione valida e leggi la proprietà charset:
<?php
$mysqli = mysqli_connect("localhost", "username", "password", "database");
if (mysqli_connect_errno()) {
die("Connection failed: " . mysqli_connect_error());
}
$charset = mysqli_get_charset($mysqli);
printf("Character set: %s\n", $charset->charset); // e.g. utf8mb4
printf("Collation: %s\n", $charset->collation); // e.g. utf8mb4_general_ci
mysqli_close($mysqli);
?>Ci connettiamo con mysqli_connect(), verifichiamo la presenza di errori di connessione, poi leggiamo i campi charset e collation dall'object restituito.
Stile orientato agli oggetti
Se preferisci l'API OOP mysqli, usa il metodo get_charset():
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
$charset = $mysqli->get_charset();
echo "Charset: {$charset->charset}\n";
echo "Max bytes: {$charset->max_length}\n"; // 4 for utf8mb4
$mysqli->close();
?>Quando usarla?
- Debug di problemi di codifica. Quando il testo memorizzato appare come
?o simboli corrotti, verificare il charset della connessione è il primo passo diagnostico. - Verificare che una chiamata a
set_charset()abbia avuto effetto. Dopo aver chiamatomysqli_set_charset()puoi rileggere il valore per assicurarti che la modifica sia stata applicata. - Ramificazione in base alla larghezza in byte. Leggere
max_lengthti dice se la connessione può memorizzare caratteri a 4 byte come le emoji (utf8mb4) o solo fino a 3 byte (utf8).
Ottenere solo il nome
Se hai bisogno solo del nome del charset e non dell'object completo, mysqli_character_set_name() lo restituisce direttamente come string:
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
echo $mysqli->character_set_name(); // e.g. utf8mb4
$mysqli->close();
?>Errori comuni
- Non confonderla con la variabile MySQL
character_set_client. Questa funzione riporta il charset che PHP sta usando per comunicare con il server; non cambia il modo in cui le colonne memorizzano i dati — quello è definito dalla definizione della tabella/colonna. - Impostare il charset esplicitamente. Affidarsi al valore predefinito del server è fragile tra gli host diversi. Chiama
mysqli_set_charset($mysqli, "utf8mb4")subito dopo la connessione, quindimysqli_get_charset()dovrebbe riportareutf8mb4. - Accesso alle proprietà su
null. Se la connessione non è riuscita, la funzione potrebbe restituirenull; leggere->charsetsunullgenera un avviso. Verifica sempre prima la connessione.
Conclusione
mysqli_get_charset() restituisce un object che descrive il set di caratteri di una connessione MySQLi — il nome, la collation e i limiti in byte. Usala per diagnosticare problemi di codifica e per confermare che mysqli_set_charset() sia stato applicato correttamente. Per ottenere solo il nome, usa mysqli_character_set_name().