W3docs

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): ?object

Nello stile orientato agli oggetti la stessa funzione è disponibile come metodo $mysqli->get_charset().

  • $mysql — una connessione restituita da mysqli_connect().
  • Valore restituito — un object stdClass che descrive il set di caratteri della connessione, oppure null se 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
charsetIl nome del set di caratteri, es. utf8mb4.
collationLa collation, es. utf8mb4_general_ci.
dirDirectory del charset (spesso vuota nelle build moderne).
min_lengthNumero minimo di byte per carattere.
max_lengthNumero massimo di byte per carattere (4 per utf8mb4).
numberID interno del charset MySQL.
stateFlag 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 chiamato mysqli_set_charset() puoi rileggere il valore per assicurarti che la modifica sia stata applicata.
  • Ramificazione in base alla larghezza in byte. Leggere max_length ti 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, quindi mysqli_get_charset() dovrebbe riportare utf8mb4.
  • Accesso alle proprietà su null. Se la connessione non è riuscita, la funzione potrebbe restituire null; leggere ->charset su null genera 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().

Pratica

Pratica
Cosa fa la funzione " `mb_internal_encoding()` in PHP?
Cosa fa la funzione " `mb_internal_encoding()` in PHP?
Was this page helpful?