
MySQL och UTF‑8 på rätt sätt
När man skall spara data på andra språk än engelska så är det teckenkodningen UTF‑8 som gäller. Den stora fördelen med detta är att det finns stöd för tusentals olika tecken så man kan spara ett å som ett å i databasen ”på riktigt” – vilket gör det otroligt mycket enklare att arbeta med text.
Tyvärr är det ganska vanligt att det ändå blir problem när man skall spara UTF-8-kodad text i en MySQL-databas, trots att både databasen och tabellen har rätt encoding
och collation
. Den troligaste orsaken till detta är att MySQLs connection character set som standard är satt till latin1 istället för UTF‑8. Detta gör att du ändå får problem med svenska och andra tecken som inte tillför latin1-uppsättningen… Här är en lösning på problemet som fungerat för oss.
Om du administrerar databasen själv
Om du har tillgång till filen my.conf så kan du under sektionen [mysqld]
lägga till följande två rader:
collation_server=utf8_unicode_ci
character_set_server=utf8
för att lösa problemet permanent på den servern.
Om du använder ett webbhotell
Använder du däremot dig av ett webbhotell så måste du sätta variabeln NAMES till rätt värde. Detta gör du i koden efter det att du anslutit till databasen. Såhär ser det ut i PHP:
mysql_query("SET NAMES utf8");
eller använd följande rad för att se till att även collation är satt till rätt värden:
mysql_query("SET NAMES 'utf8' COLLATE 'utf8_general_ci'");
… och du kan till och med behöva sätta character set på egen hand om detta inte heller är satt till UTF8:
mysql_query("SET CHARACTER_SET utf8");
Om MySQL är konfigurerat på rätt sätt så skall den översta raden ovan räcka men det är kanske inte hela världen att sätta allihop för att vara på den säkra sidan heller…
Vill du ha mer information om detta så hittar du det i MySQL 5.0 Reference Manual, section 9.1.4
Relaterade artiklar
- Artikel
- Artikel
- Artikel