subota, 30. avgust, 2008.

PhpBB3 i MySQL collate problem

Poslednjih mesec i kusur dana radim na formiranju terorističkog udruženja korisnika GNU/Linux operativnog sistema u Užicu (LuGUE), i, uz pomoć nekoliko dobrih ljudi, dobio sam besplatan nalog na jednom serveru sa svim pogodnostima (100 MB, MySQL, FTP, e-mail, CGI/Perl/Python, sendmail, cPanel i beskonačan mesečni bandwidth) kao i dva besplatna domena: lugue.iz.rs i lug.uzice.net.

Odmah sam postavio najnoviji phpBB forum (3.02 Olympus) i počeo sa razgradnjom, kad ne lezi vraže… Umesto naših domaćih, kukastih č i ć stoji znak pitanja. Problem je ležao u rusvaju od MySQL baze podataka koju phpBB koristi. Enkoding (set karaktera), odnosno collate, je za svaku tabelu po defaultu bio podešen na latin1_swedish_ci (Švedski?!). U phpMyAdmin-u postoji opcija za ručno menjanje enkodinga, ali u toj bazi ima 20+ tabela, pa sam, normalno, potražio neki brži način. I našao ga u obliku PHP skripte:

<?php
$db = mysql_connect('localhost','user_name','password');
if(!$db) echo "Cannot connect to the database - incorrect details";
mysql_select_db('db_name'); $result=mysql_query('show tables');
while($tables = mysql_fetch_array($result)) {
foreach ($tables as $key => $value) {
mysql_query("ALTER TABLE $value CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin");
echo "Changed collation of table $value to utf8_bin.";
}}
echo "The collation of your database has been successfully changed!";
?>

Ona je odlično obavila posao, s tim što sam morao da izmenim neke stvari (u izvornom obliku ne postoji deo CONVERT TO CHARACTER SET utf8, lupao sam glavu dva sata dok sam to provalio - tako mi i treba kada me mrzi da naučim SQL), i tako se sada Vukova slovca blistaju na početnoj stranici mog prvog foruma :).

Napominjem da je takođe neophodno podesiti MySQL connection collation opciju na utf8_bin ili utf8_unicode_ci u kontrolnom panelu phpMyAdmin-a.