noqqe


blog | sammelsurium | projects | about

Charset | UTF8 für Apache, PHP, MySQL, Debian und Wordpress

2011-02-24 @ administration, apache2, charset, debian, linux, mysql, php, shell, sql, utf8, wordpress

Nachdem ich die Migration meines Blogs auf meinen neues Stück Blech größtenteils abgeschlossen hatte, wurde ich wieder an den Charset Wirr-Warr von IT-Systemen erinnert. Um meinem Blog seine Umlaute wieder zu beschaffen habe ich folgende Änderungen an verschiedenen Stellen eingespielt. Vorzugsweise immer in den entsprechenden conf.d/ Verzeichnissen, da die Änderungen evtl. beim nächsten Upgrade überschrieben werden könnten.

Apache2 Charset

vim /etc/apache2/conf.d/charset
AddDefaultCharset UTF-8

PHP5 Charset

$ vim /etc/php5/apache2/conf.d/charset.ini
[PHP]
default_charset = "utf-8"
[mbstring]
mbstring.language = utf-8
mbstring.internal_encoding = utf-8
mbstring.http_input = utf-8
mbstring.http_output = utf-8

MySQL Charset

$ vim /etc/mysql/conf.d/character.cnf
[client]
default-character-set = utf8
[mysqld]
default-character-set = utf8
character-set-server = utf8
collation-server= utf8_general_ci
init_connect = ‘SET collation_connection = utf8_general_ci’
init_connect = ‘SET NAMES utf8′
[mysqldump]
default-character-set = utf8
[mysqlimport]
default-character-set = utf8
[mysql]
default-character-set = utf8

Debian Wordpress Config

$ vim /etc/wordpress/config-blog.url.php
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');
define('WPLANG', 'de_DE.UTF-8');

Debian Locales

$ dpkg-reconfigure locales

Sollte ich es mal wieder brauchen, lese ich hier nach.

Comments (4)

savier on 2011-02-24T19:43:39
Charsets sind wirklich so eine Sache für sich :) Man kann mit den kleinsten Problemen den größten Spaß haben.

Christian on 2012-06-12T15:39:46
Bin grade auf deinen Blog gestoßen, nachdem ich es selbst verzweifelt probiert habe. Ich habe auch noch keine funktionierende Sache, glaube aber, dass du trotzdem einen Fehler hier drin hast. Kannst es ja vlt mal überprüfen: Meine Datei war die "/etc/mysql/conf.d/mysqld_anything_utf8.cnf" ich habe die Datei-Endung .cnf gewählt, weil in der letzten Zeilen von /etc/mysql/my.cnf steht, dass alle Dateien in /etc/mysql/conf.d/ die Dateiendung cnf haben müssen, sonst werden sie ignoriert. Ich vermute, daher wird deine Datei irgnoriert und du bekommst nicht den Fehler, den ich bekomme. Ich habe nämlich in meiner Datei /etc/mysql/conf.d/mysqld_anything_utf8.cnf stehen: [mysqld] character_set_database=utf8 character_set_server=utf8 Und der mysql-Server verweigert dann mit "/etc/init.d/mysql restart" das starten, bis ich die Datei /etc/mysql/conf.d/mysqld_anything_utf8.cnf wieder gelöscht habe. Deine Blog mag also funktionieren, aber das liegt vermutlich an was anderem. LG Chris PS: Warum zum Teufel können die nicht standardmäßig überall UTF8 nehmen....!?!?!

Christian on 2012-06-12T16:02:38
 Ok, hier meine Lösung, die bei mir mit MySQL 5.5 unter Ubuntu12.04 nun endlich funktioniert. Meine Datei ist /etc/mysql/conf.d/mysqld_anything_utf8.cnf Die Datei hat den Inhalt _________ [mysqld] character_set_server=utf8 _________ Die Zeile character_set_database=utf8 durfte schlichtweg nicht enthalten sein, da nach dem Neustart des MySQL-Service mittels "sudo service mysql restart" character_set_database automatisch mit auf utf8 geändert wurde. Wichtig ist aber, dass die Datei die Endung .cnf aufweißt, sonst wird sie ignoriert. Danach kontrolliert man noch schön alles mit "mysql -u root -p" Mysql fragt einen dann natürlich nach dem Passwort. Eingeben und dann ist man in der MySQL-Console. Dort gibt man ein "SHOW VARIABLES LIKE 'char%';" (natürlich ohne die Anführungszeichen, die ich gesetzt habe). Nun sollte alles (außer natürlich character_set_filesystem) nicht mehr auf latin1, sondern auf utf8 stehen. Vorher war das ja nicht der Fall, da stand dort latin1. Die Collations stimmen nun auch. (show variables like 'collation%';) Ich werde noch ein Programm schreiben, welches überprüft ob auch die Connection auf utf8 gesetzt ist, wenn ich per Java und MysqlConnectorJ darauf zugreife.

noqqe on 2012-06-12T17:48:53
Oh, ja da hast du natürlich vollkommen recht! Die Dateiendung ist falsch! Ich änder das :) Vielen Dank!