Karaktersets in Mysql
Karaktersets en collation in een database, het is altijd weer lastig met al die rare tekens die we in onze woorden hebben. Zo moest ik laatst een backup terugzetten van de database – mislukt experimentje – en daarna werden alle tekens met accenten niet goed weergegeven. Dat het een lastig iets is, wordt wel bewezen door het ticket dat al meer dan een jaar geleden is aangemaakt en nog steeds open staat.
Na wat uitzoeken kwam ik erachter dat WordPress tot versie 2.1.3 standaard de tabellen aanmaakt met karakterset latin1 en collation latin1_swedish_ci. Vanaf versie 2.2 hebben ze er voor gekozen om de tabellen aan te maken met karakterset utf8 en collation utf8_general_ci.
Nu is dit blog ooit begonnen met versie 1.5 en dus zijn de tabellen aangemaakt met latin1. Om het probleem met de vreemde tekens nu voor eens en voor altijd op te lossen wil ik alles gaan bijwerken naar utf8. Omdat ik er niet van hou om dingen nodeloos ingewikkeld te maken heb ik het volgende stappenplan voor ogen om een testomgeving te maken:
- kopie maken van huidige tabellen
- testtabellen omzetten naar collation utf8_general_ci
De kopie van de tabellen kan als volgt gemaakt worden:
create table wptest_posts select * from wp_posts;
Vervolgens heb ik alle tabellen omgezet met de query:
alter table wptest_posts collate utf8_general_ci;
Daarna is het simpelweg even een kopie maken van de huidige directory waar WordPress in staat en kijken of alle berichten de conversie hebben overleefd. Mocht dat het geval zijn, dan is het omzetten van de tabellen naar utf8 niet meer dan een paar eenvoudige queries.
Toevoeging 30 april 2008
De test is goed verlopen, alle berichten in de testtabellen hebben het goed overleefd. Wijziging is nu doorgevoerd.