Simply.com is available in english

Set de caractere și collation pentru o bază de date MySQL

Folosiți charset utf8mb4 și collation utf8mb4_unicode_ci în MySQL și schimbați-le prin phpMyAdmin sau comenzi ALTER, amintiți-vă și de SET NAMES pentru conexiune.

Charset (setul de caractere) determină ce caractere poate salva baza de date, iar collation determină cum sunt comparate și sortate caracterele. Un charset incorect este cea mai frecventă cauză pentru ca literele daneze (æ, ø, å) sau emoji-urile să apară ca semne de întrebare sau mojibake (de exemplu æ în loc de æ).

Valori recomandate

Folosește utf8mb4 ca charset și utf8mb4_unicode_ci ca collation. utf8mb4 suportă toate caracterele Unicode, inclusiv emoji-urile.

Metoda 1: phpMyAdmin

Schimbă setarea implicită pentru întreaga bază de date (se aplică numai tabelelor noi):

  1. Autentifică-te în phpMyAdmin și selectează baza de date în partea stângă.
  2. Dă click pe fila Operații.
  3. Găsește secțiunea Sortare (Collation).
  4. Selectează utf8mb4_unicode_ci din meniul derulant.
  5. Dă click pe Execută.

Schimbă un tabel existent (incluzând toate coloanele sale):

  1. Selectează tabelul în partea stângă.
  2. Dă click pe fila Operații.
  3. În secțiunea Opțiuni tabel se selectează noua sortare.
  4. Bifează Schimbă și sortarea pentru toate coloanele.
  5. Dă click pe Execută.

Metoda 2: SQL

Schimbă setarea implicită a bazei de date:

ALTER DATABASE mindatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Schimbă un tabel și toate coloanele sale:

ALTER TABLE mintabel CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

În phpMyAdmin poți modifica charset-ul pe coloană: selectează tabelul, dă click pe Structură, dă click pe Schimbă lângă coloană și selectează noua sortare în definiția coloanei.

Convertește toate tabelele simultan

Generează comenzile ALTER automat:

SELECT CONCAT('ALTER TABLE `', TABLE_NAME, '` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;')
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'mindatabase' AND TABLE_TYPE = 'BASE TABLE';

Rulează rezultatul în phpMyAdmin pe fila SQL sau prin linia de comandă.

Charset-ul conexiunii (SET NAMES)

Charset-ul bazei de date și charset-ul conexiunii sunt două lucruri diferite. Chiar dacă tabelele tale sunt setate corect la utf8mb4, caracterele pot deveni corupte în tranzit, dacă conexiunea dintre aplicație și MySQL folosește un alt charset.

SET NAMES utf8mb4 setează trei variabile de sesiune simultan:

  • character_set_client — ce așteaptă serverul să primească de la client
  • character_set_connection — ce folosește serverul intern în timpul procesării interogării
  • character_set_results — ce trimite serverul înapoi către client
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;

Practica recomandată: folosește opțiunea de charset încorporată a driverului în loc să trimiți manual SET NAMES. Aceasta asigură că și funcțiile precum mysqli_real_escape_string() și PDO::quote() utilizează charset-ul corect — în caz contrar, în situații rare, poți deschide vulnerabilități de tip SQL‑injection.

Articol din categoria de suport: MySQL

Alte articole relevante