Mysql’de Toplu Karakter Seti Değişimi
Web işiyle uğraşanlar karakter setinden doğan sorunları çok iyi bilir. Özellikle de benim gibi işten yarım yamalak anlayan tipler için bazen günlerce sürecek bir işkenceyi de beraberinde getirir bu sorunlar.
Mysql’de türkçe karakterler fazlasıyla başağrıtıcı olabiliyor. Hele de çok fazla tablo ve alan varsa veritabanında çok uzun bir zaman alır tek tek değiştirmek.
Benim de arkeo.org isimli ve Joomla! üzerine kurmuş olduğum bir sitem var. Joomla daha önce farklı karakter seti kullanıyordu. Utf-8 karakter setine son sürümle birlikte geçti. Ancak benim veritabanı eski olduğundan bir kaç tablo Utf-8, diğerleri başka bir karakter setindeydi. Hepsini tek tek değiştirmem gerekiyordu. Google’da aramalarım sonucu aşağıdaki güzel scripti buldum.
Kodu kopyalayıp mysql.php veya başka bir isimle sunucunuza veya localhost’a kaydediyorsunuz.
<?php /*
yazan : turker
e-mail : turker.biz@gmail.com
version : 0.01
------------
Üstteki bilgilere dokunmadan, istediğiniz gibi kullanabilir, satabilir ve dağıtabilirsiniz.
*/
# karakter seti ayarları
$charset='utf8';
# bağlantı ayarları
$conn=mysql_connect("localhost","root","") or die('nerdesin mysql?');
mysql_select_db("testdb",$conn) or die('taze bitti');
# karakter seti değiştirilecek alan tipleri
$types=array(
'CHAR',
'VARCHAR',
'TINYTEXT',
'TEXT',
'MEDIUMTEXT',
'LONGTEXT',
'TINYBLOB',
'BLOB',
'MEDIUMBLOB',
'LONGBLOB',
'ENUM',
'SET'
);
/*---------------- yeter bu kadar ayar ----------------------- */
# follow the white rabbit
$q1=mysql_query('SHOW TABLES');
while ($r1=mysql_fetch_array($q1)) {
$table=$r1[0];
$sql='ALTER TABLE '.$table.' CONVERT TO CHARACTER SET '.
$charset.' COLLATE '.$charset.'_turkish_ci';
mysql_query($sql);
echo "\n\n
$table tablosunun karakter seti değiştirildi";
$q2=mysql_query('SHOW FIELDS FROM `'.$table.'`');
while ($r2=mysql_fetch_assoc($q2)) {
//print_r($r2);
$field=$r2['Field'];
$type=strtoupper($r2['Type']);
$null=strtoupper($r2['Null']);
$default=strtoupper($r2['Default']);
if (in_array($type,$types)) {
if ($null=='YES') $null='NULL';
else $null='NOT NULL';
if (!empty($default)) $default='DEFAULT '.$default;
$sql='ALTER TABLE `'.$table.'` MODIFY COLUMN `'.$field.'` '.$type.' CHARACTER SET '.
$charset.' COLLATE '.$charset.'_turkish_ci '.$null.' '.$default;
mysql_query($sql);
} // if
} // while
echo "\n
$table tablosu içindeki alanların karakter seti değiştirildi";
} // while ?>
Daha sonra veritabanıyla ilgili gerekli bilgileri (kullanıcı adı, şifre vs..gibi) giriyoruz ve dosyayı sunucu üzerinde çalıştırıyoruz. Bir – iki dakika içersinde tüm tablolar ve tablolardaki tüm alanların karakter seti değişmiş oluyor. İstediğini karakter setini de script içersinden ayarlamanız gerekiyor tabi. Varsayılan olarak Utf-8_General_Ci ayarlanmış. Scripti yazan arkadaşa bir teşekkür etmeli tabi…

sadece joomlada mı oluyor acaba diğer scriptlerde denesek olur mu?