Ce face mysqli_set_charset
Codarea conexiunii spune serverului cum să interpreteze textele trimise și în ce formă să le returneze. Dacă nu se potrivește cu codarea paginii (UTF-8), diacriticele se strică. Apelează mysqli_set_charset($conn, "utf8mb4") imediat după conectare.
utf8mb4 este UTF-8 complet, care include și emoji. Vechiul utf8 din MySQL (utf8mb3) acceptă doar caractere de maximum 3 octeți. Funcția este preferată în locul comenzii SQL SET NAMES, pentru că informează și PHP despre codare, ceea ce contează pentru mysqli_real_escape_string.
Exemplele de pe această pagină folosesc baza de date magazin, cu tabelul produse (coloanele id INT AUTO_INCREMENT, nume VARCHAR(100) NOT NULL, pret INT și stoc INT) și patru rânduri: Laptop (3200 lei, 5 buc.), Mouse (80 lei, 40 buc.), Monitor (900 lei, 0 buc.) și Tastatură (150 lei, 12 buc.). Comenzile SQL sunt explicate în secțiunea MySQL. Rezultatele au fost scrise pentru MySQL 8, pentru că exemplele au nevoie de un server de baze de date.
Parametri
| Parametru | Descriere |
|---|---|
$mysql |
Conexiunea. |
$charset |
Codarea, de obicei "utf8mb4". |
Ce returnează
true la succes. O codare necunoscută aruncă mysqli_sql_exception (PHP 8.1+).
Exemple
Exemplul 1: Setarea și verificarea codării
<?php
$conn = mysqli_connect("localhost", "ana", "parola_ta", "magazin");
mysqli_set_charset($conn, "utf8mb4");
echo mysqli_character_set_name($conn) . "\n";
$rand = mysqli_fetch_assoc(mysqli_query($conn, "SELECT nume, CHAR_LENGTH(nume) AS litere, LENGTH(nume) AS octeti FROM produse WHERE id = 4"));
echo "{$rand['nume']}: {$rand['litere']} litere, {$rand['octeti']} octeți";
Rezultat (cu un server MySQL și tabelul produse de mai sus)
utf8mb4
Tastatură: 9 litere, 10 octeți
Greșeli frecvente
- Folosești
"utf8"și salvezi un emoji. MySQL refuză valoarea sau o taie, pentru căutf8înseamnă de faptutf8mb3. Foloseșteutf8mb4.
Comenzi înrudite
mysqli_connect: Deschide o conexiune la un server MySQL sau MariaDB și returnează obiectul conexiunii.mysqli_character_set_name: Returnează numele codării de caractere folosite de conexiune, de exemplu utf8mb4.mysqli_get_charset: Returnează un obiect cu detalii despre codarea conexiunii: nume, colaționare, octeți pe caracter.