Проблем с колация

Donjo

Registered
Добър ден, моля да ми помогнете имам следния проблем:

Имам база данни на latin1_general.ci

Когато въведа нещо на бг ми изписва някакви странни знаци ì à ì ê à ì &o

Значи искам да я прекодирам на utf8_general.ci

четах доста уроци, но нищо не става ? Моля помогнете?
 
Отиваш в PHPMyAdmin влизаш си в таблицата и има горе структура. Натискаш там и трябва да има едно колация: избираш го на последното
 
Да но това ми сменя колацията само на Базата не и на старите полетата
 
Ето ти едно кодче, което ще обходи всичките бази с данни (върху които има права потребителя), таблици и полета и ще ги конвертира към избран от теб charset.. :)

Съветвам те да не редактираш друго освен отбелязаното в червено, освен ако не знаеш точно какво правиш естествено :)

В масива skip можеш да запишеш името на някоя от база данните, в случай, че не искаш да бъде конвертирана :)

<?php
define('_server', '127.0.0.1');
define('_username', 'root');
define('_password', 'password');

$encoding1 = 'utf8';
$encoding2 = 'utf8_unicode_ci';

$skip = array
(
'information_schema',
'mysql',
'phpmyadmin',
);

///////////////////////////////////////////////////////
// ================================================= //
// ============ Край на конфигурацията ============= //
// ================================================= //
///////////////////////////////////////////////////////

mysql_connect(_server, _username, _password) or die ('Line: ' . __LINE__ . '<br /> ' . mysql_error());

$q1 = mysql_query('SHOW DATABASES') or die ('Line: ' . __LINE__ . '<br /> ' . mysql_error());
while($r1 = mysql_fetch_assoc($q1))
{
if(!in_array($r1['Database'], $skip))
{
mysql_query('ALTER DATABASE `' . $r1['Database'] . '` DEFAULT CHARACTER SET ' . $encoding1 . ' COLLATE ' . $encoding2);
$q2 = mysql_query('SHOW TABLES FROM `' . $r1['Database'] . '`') or die ('Line: ' . __LINE__ . '<br /> ' . mysql_error());
while($r2 = mysql_fetch_assoc($q2))
{
$table = $r2['Tables_in_' . $r1['Database']];

mysql_query('ALTER TABLE `' . $r1['Database'] . '`.`' . $table . '` DEFAULT CHARACTER SET ' . $encoding1 . ' COLLATE ' . $encoding2) or die ('Line: ' . __LINE__ . '<br /> ' . mysql_error());

$q3 = mysql_query('SHOW COLUMNS FROM `' . $table . '` FROM `' . $r1['Database'] . '`') or die ('Line: ' . __LINE__ . '<br /> ' . mysql_error());
while($r3 = mysql_fetch_assoc($q3))
{
$type = strtolower($r3['Type']);
if(!preg_match('/int/', $type) && !preg_match('/date/', $type) && !preg_match('/timestamp/', $type) && !preg_match('/float/', $type))
{
$q4 = 'ALTER TABLE `' . $r1['Database'] . '`.`' . $table . '` CHANGE `' . $r1['Database'] . '`.`' . $table . '`.`' . $r3['Field'] . '` `' . $r1['Database'] . '`.`' . $table . '`.`' . $r3['Field'] . '` ' . $r3['Type'] . ' CHARACTER SET ' . $encoding1 . ' COLLATE ' . $encoding2 . ' NOT NULL';
$convert = '`' . $r1['Database'] . '`.`' . $table . '`';
printf('Converting <strong>%s</strong><br />Query: %s<br /><br /><br />', $convert, $q4);
mysql_query($q4) or die ('Database: ' . $r1['Database'] . '<br /> Table: ' . $table . '<br />Field: ' . $r3['Field'] . '<br /> Type: ' . $r3['Type'] . '<br />' . mysql_error());
}
}
}
}
}

mysql_close();
?>
 

Back
Горе