Sql.php на русском а в базе крякозябры, как исправить?
Имеется cms, перевел ее на русский, т.е. в install папке есть файл sql.php в нем английский и русский языки.
Сам файл в utf-8 кодировке.
Инсталлирую cms на бузу в utf-8 и default кодировке, получаю крякозябры в базе и на сайте вместо русского языка.
Сам файл пробовал перекодировать в ansi, результат тот же.
Как исправить, в чем может быть дело?
Спасибо!
MyISAM
utf8_unicode_ci
2.1 КБ
-
15 таблиц
Всего
396
InnoDB
utf8_general_ci 64.9 КБ
0 Байт
Теперь в базе и сопоставление и таблицы utf8_general_ci
http://gyazo.com/a7ac019c7ffb8c3c38df80e31d19044d.png
В конце
InnoDB
utf8_general_ci
Не помогло.
Или перекодировать не означает изменить utf8_unicode_ci на utf8_general_ci
Конечно нет, вы просто изменили кодировку столбца/таблицы, но не изменили содержимое
Видимо где-то в код нужно кодировку прописать
$connection = mysql_connect($session->get('db_hostname'), $session->get('db_username'), $session->get('db_password'));
mysql_select_db($session->get('db_name'), $connection);
$sql = file_get_contents(ABSOLUTE_PATH . 'install/database.sql');
$sql = explode(";\n", $sql);
$replace = array('__TABLE_PREFIX__' => $session->get('table_prefix'));
$sql = str_replace(array_keys($replace), $replace, $sql);
foreach($sql as $value) {
Спасибо.
Мне нужно не в базе перекодировать а сам файл, чтобы на автомате ставилось как нужно, без необходимости правки бд.
часть файла
REATE TABLE IF NOT EXISTS __TABLE_PREFIX__translations (
translation_id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
language_id INT(11) UNSIGNED NOT NULL,
translation_key TEXT,
translation_text TEXT,
PRIMARY KEY (translation_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
INSERT INTO __TABLE_PREFIX__translations VALUES(1, 1, 'Name', 'Name');
======
почему пишу сей способ - потому что был опыт. я работаю в блокноте, друг в ворд паде. ему приходилось мои доки открывать у себя и пересохранять и только потом загружать на сервак. мы недели две ругались из-за этого, пока не поняли в чем дело.
Раньше все без проблем получалось, теперь не хочет и все, в чем дело не пойму.
Скрипт, работающий с базой (заполнявший таблицы) никак не устанавливал
кодировку соединения с БД. В результате она оставалась той, что
по-умолчанию применяется для клиентов. А применяется та, которую
используют основатели MySQL AB, шведы по национальности. То есть
европейская latin1 с сопоставлением latin1_swedish_ci.
И сервер естественно полагал, что в него пихают данные latin1 (а вовсе
не windows-1251), и считал своим долгом перед тем как уложить в таблицы в
UTF-8 (тип БД и таблиц) эти данные в UTF-8 из latin1 преобразовать.
Естественно теперь, когда Вы пытаетесь обратиться к данным или снять дамп нормальным клиентом, Вы получаете фигню.
Вот как указать кодировку соединения не знаю :(
Проблему решил добавлением
@mysql_query("SET NAMES 'utf8'");
mysql_query ("set character_set_client='utf8'");
mysql_query ("set character_set_results='utf8'");
mysql_query ("set collation_connection='utf8_general_ci'");
после соединения с базой данных.