Simply.com is available in english

Charset og collation á MySQL-gagnagrunni

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ð æ).

Mælt með gildi

Notaðu utf8mb4 sem charset og utf8mb4_unicode_ci sem collation. utf8mb4 styður öll Unicode‑tákn, þar með emojis.

Aðferð 1: phpMyAdmin

Breyta sjálfgefnu fyrir alla gagnagrunninn (gildir aðeins fyrir nýjar töflur):

  1. Skráðu þig inn í phpMyAdmin og veldu gagnagrunninn í vinstri hlið.
  2. Smelltu á flipann Operationer.
  3. Finndu hluta Sortering (Collation).
  4. Veldu utf8mb4_unicode_ci í fellivalmyndinni.
  5. Smelltu á Udfør.

Breyta fyrirliggjandi töflu (innifalið allar hennar dálkar):

  1. Veldu töfluna í vinstri hlið.
  2. Smelltu á flipann Operationer.
  3. Undir Tabelvalgmuligheder veldu nýja röðun.
  4. Settu hak í Skift også sortering for alle kolonner.
  5. Smelltu á Udfør.

Aðferð 2: SQL

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.

Umbreyta öllum töflum í einu

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.

Charset tengingar (SET NAMES)

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ðlaranum
  • character_set_connection — hvaða charset netþjónninn notar innri á meðan á fyrirspurnvinnslu stendur
  • character_set_results — hvað netþjónninn sendir til baka til biðlarans
SET 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

Önnur viðkomandi greinar