Notaðu charset utf8mb4 og collation utf8mb4_unicode_ci í MySQL og breyttu þeim í phpMyAdmin eða með ALTER skipunum, mundu einnig að nota SET NAMES fyrir tenginguna.
Charset (teiknsett) ákvarðar hvaða tákn gagnagrunnurinn getur geymt, og collation ákvarðar hvernig táknin eru born saman og flokkað. Rangt charset er algengasta ástæðan fyrir því að íslenskir stafir (æ, ø, å) eða emojis birtast sem spurningarmerki eða mojibake (t.d. æ í stað æ).
Notaðu utf8mb4 sem charset og utf8mb4_unicode_ci sem collation. utf8mb4 styður öll Unicode‑tákn, þar með emojis.
Breyta sjálfgefnu fyrir alla gagnagrunninn (gildir aðeins fyrir nýjar töflur):
utf8mb4_unicode_ci í fellivalmyndinni.Breyta fyrirliggjandi töflu (innifalið allar hennar dálkar):
Breyta sjálfgefnu gagnagrunnsins:
ALTER DATABASE mindatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Breyta töflu og öllum hennar dálkum:
ALTER TABLE mintabel CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Í phpMyAdmin geturðu breytt charset eftir dálki: veldu töfluna, smelltu á Struktur, smelltu á Skift við hliðinn á dálkinum, og veldu nýja röðun í dálkskilgreiningunni.
Búðu til ALTER-skipanirnar sjálfkrafa:
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';
Keyrðu niðurstöðuna í phpMyAdmin undir flipanum SQL eða í gegnum skipanalínuna.
Database-charset og tengingar‑charset eru tvær ólíkar hlutir. Jafnvel þótt töflurnar þínar séu rétt stilltar á utf8mb4, geta tákn orðið skemmdir í flutningi, ef tengingin milli forritsins og MySQL notar annað charset.
SET NAMES utf8mb4 stillir þrjár setu breytur í einu:
character_set_client — hvað netþjónninn býst við að taka frá biðlaranumcharacter_set_connection — hvaða charset netþjónninn notar innri á meðan á fyrirspurnvinnslu stendurcharacter_set_results — hvað netþjónninn sendir til baka til biðlaransSET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
Bættasta framkvæmd: notaðu innbyggða charset‑valkost drifunnar í stað þess að senda SET NAMES handvirkt. Þetta tryggir að einnig aðgerðir eins og mysqli_real_escape_string() og PDO::quote() noti rétt charset — annars geturðu í sjaldgæfu tilfellum opnað fyrir SQL‑injection.
Grein úr stuðningsflokkinum: MySQL