Конветрація бази даних в інше кодування
Деколи буває, що при проектуванні бази даних, народ робить одну помилку - вказує неправильне кодування. Наприклад сайт в UTF-8, а кодування бд - latin1, чи щось типу цього. З такою ситуацією зустрівся і я. Треба було якось всю базу перекодувати в utf-8. Погугливши, і прочитавши цей пост в мене получився приблизно такий скрипт конвертації (OS в мене Ubuntu Linux):
$tmp_file = '/path/to/dump.sql';
exec('mysqldump --user=username --password=password --host=host --default-character-set=latin1 -n -K --skip-set-charset --skip-extended-insert --comments=0 database_name > '.$tmp_file);
$string = "ALTER DATABASE `database_name` CHARACTER SET 'utf8'; ALTER DATABASE `".$db_config['db']['params']['dbname']."` COLLATE 'utf8_general_ci';
";
$data = file_get_contents($tmp_file);
$data = preg_replace('/DEFAULT CHARSET=(.*);/', 'DEFAULT CHARSET=utf8;', $data);
$res = fopen($tmp_file, 'w+');
$string .= $data;
fwrite($res, $string);
fclose($res);
exec("mysql --max_allowed_packet=1M --user=username --password=password --host=host --default-character-set=utf8 database_name < ".$tmp_file);
exec('chmod 777 '.$tmp_file);
exec('rm '.$tmp_file);
exec('mysqldump --user=username --password=password --host=host --default-character-set=latin1 -n -K --skip-set-charset --skip-extended-insert --comments=0 database_name > '.$tmp_file);
$string = "ALTER DATABASE `database_name` CHARACTER SET 'utf8'; ALTER DATABASE `".$db_config['db']['params']['dbname']."` COLLATE 'utf8_general_ci';
";
$data = file_get_contents($tmp_file);
$data = preg_replace('/DEFAULT CHARSET=(.*);/', 'DEFAULT CHARSET=utf8;', $data);
$res = fopen($tmp_file, 'w+');
$string .= $data;
fwrite($res, $string);
fclose($res);
exec("mysql --max_allowed_packet=1M --user=username --password=password --host=host --default-character-set=utf8 database_name < ".$tmp_file);
exec('chmod 777 '.$tmp_file);
exec('rm '.$tmp_file);
В мене конвертнуло коректно. Якщо що, я думаю ви без проблем розберетесь з кодом і підправите його
Успіхів! Крім того не забудьте всі решта запитів робити в utf-8.
$sql = "SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'";
Аналогічно
$sql = "SET NAMES 'utf8'";
P.S. Не забудьте зробити бекап бази перед виконанням (про всяк випадок).
20 липня 2011р.
переглядів: 476
а засобами ПХПМайАадмін чого не скористався?
Я говорю не тільки про зміну кодування в таблиці, але і про зміну кодування даних всередині таблиці.
щось я не побачив в твоєму коді стрічки де перекодовуються дані в БД
А ти запусти скрипт і побач результат
Тут і не робиться перекодовування, тому ви і не побачили стрічку. Тут зливається файл, змінюється в ньому назва кодування де тільки можна і додається рядок олтера. Меджік.
Ваше ім'я
Ваш E-mail


























