Kasuta MySQL-is charset utf8mb4 ja collation utf8mb4_unicode_ci ning vaheta neid phpMyAdmini või ALTER‑käskude kaudu, ära unusta ka SET NAMES‑i ühenduse jaoks.
Charset (tegnsæt) määrab, milliseid märke andmebaas saab salvestada, ja collation määrab, kuidas märgid võrreldakse ja sorteeritakse. Vale charset on kõige sagedasem põhjus, miks taani tähed (æ, ø, å) või emojid kuvatakse küsimärgina või mojibake'na (nt. æ asemel æ).
Kasuta utf8mb4 märgistikuna ja utf8mb4_unicode_ci collation'na. utf8mb4 toetab kõiki Unicode-märke, sealhulgas emojisid.
Muuda kogu andmebaasi vaikeväärtust (kehtib ainult uutele tabelitele):
utf8mb4_unicode_ci rippmenüüst.Muuda olemasolevat tabelit (kaasa arvatud kõik selle veerud):
Muuda andmebaasi vaikeväärtust:
ALTER DATABASE mindatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Muuda tabelit ja kõiki selle veerge:
ALTER TABLE mintabel CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
phpMyAdminis saad muuta märgistikku veeru kaupa: vali tabel, klõpsa Struktuur, klõpsa veeru kõrval Muuda, ja vali uus sorteerimine veerude definitsioonis.
Genereeri ALTER-käsud automaatselt:
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';
Käivita tulemus phpMyAdminis vahekaardil SQL või käsurea kaudu.
Andmebaasi märgistik ja ühenduse märgistik on kaks erinevat asja. Isegi kui sinu tabelid on õigesti seatud utf8mb4-ks, võivad märgid transiidis korrumpeeruda, kui rakenduse ja MySQL-i vaheline ühendus kasutab muud märgistiku.
SET NAMES utf8mb4 seab korraga kolm seansimuutujat:
character_set_client — mida server ootab kliendilt saadacharacter_set_connection — mida server kasutab sisemiselt päringu töötlemiselcharacter_set_results — mida server saadab kliendile tagasiSET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
Parem praktika: kasuta draiveri sisseehitatud märgistikuvõimalust selle asemel, et saata SET NAMES käsitsi. See tagab, et ka funktsioonid nagu mysqli_real_escape_string() ja PDO::quote() kasutavad õiget märgistiku — muidu võid harva juhtudel avada tee SQL-süstimisele.
Artikkel tugikategooriast: MySQL