SEO Сообщество: Спрашивайте и помогайте

Присоединяйтесь к сообществу профессиональных веб-мастеров PR-CY, отвечайте на вопросы коллег и задавайте свои.

Q&A SEO

Sql.php на русском а в базе крякозябры, как исправить?

74ivan74 74ivan74  
472
  04.02.2014 20:22       1 736    
Имеется cms, перевел ее на русский, т.е. в install папке есть файл sql.php в нем английский и русский языки.

Сам файл в utf-8 кодировке.

Инсталлирую cms на бузу в utf-8 и default кодировке, получаю крякозябры в базе и на сайте вместо русского языка.
Сам файл пробовал перекодировать в ansi, результат тот же.
Как исправить, в чем может быть дело?
Спасибо!

Ответы на пост (21) Написать ответ
falselight falselight
47
04.02.2014 20:57
тип таблиц utf8_general_ci ?
0
74ivan74 74ivan74
472
04.02.2014 21:06
Да. Но таблицы utf8_unicode_ci из-за чего не знаю
0
74ivan74 74ivan74
472
04.02.2014 21:07
1
MyISAM
utf8_unicode_ci

2.1 КБ
-






15 таблиц

Всего
396

InnoDB

utf8_general_ci 64.9 КБ
0 Байт
0
74ivan74 74ivan74
472
04.02.2014 21:10
Сопоставление utf8_general_ci, таблицы utf8_unicode_ci, тип InnoDB хз что это и из-за чего.
0
74ivan74 74ivan74
472
04.02.2014 21:15
Тип таблиц в файле utf8_unicode_ci только сейчас заметил, изменить на utf8_general_ci?
0
TemKa_SD TemKa_SD
44
04.02.2014 21:16
да
0
TemKa_SD TemKa_SD
44
04.02.2014 21:15
перекодируйте в utf8_general_ci
0
74ivan74 74ivan74
472
04.02.2014 21:39
Просто в sql файле изменил utf8_unicode_ci на utf8_general_ci
Теперь в базе и сопоставление и таблицы utf8_general_ci
http://gyazo.com/a7ac019c7ffb8c3c38df80e31d19044d.png
В конце


InnoDB

utf8_general_ci
Не помогло.
Или перекодировать не означает изменить utf8_unicode_ci на utf8_general_ci
0
TemKa_SD TemKa_SD
44
04.02.2014 21:40
Всё правильно, зайдите в какую-нибудь таблицу и посмотрите как там отображается русский текст
0
74ivan74 74ivan74
472
04.02.2014 21:43
русский там кривой
0
TemKa_SD TemKa_SD
44
04.02.2014 21:58
А в sql файле нормально всё?
0
shift196 shift196
182
04.02.2014 22:00
Или перекодировать не означает изменить utf8_unicode_ci на utf8_general_ci
Конечно нет, вы просто изменили кодировку столбца/таблицы, но не изменили содержимое
0
74ivan74 74ivan74
472
04.02.2014 22:01
Да.
Видимо где-то в код нужно кодировку прописать
$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) {
0
74ivan74 74ivan74
472
04.02.2014 22:02
буду искать мануал по перекодировке :)
Спасибо.
0
74ivan74 74ivan74
472
04.02.2014 22:11
Не знаю как перекодировать.
Мне нужно не в базе перекодировать а сам файл, чтобы на автомате ставилось как нужно, без необходимости правки бд.
часть файла
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');
0
74ivan74 74ivan74
472
04.02.2014 22:12
INSERT INTO __TABLE_PREFIX__translations VALUES(1, 1, 'Name', 'Имя');
0
milko milko
282
04.02.2014 22:54
попробуйте так. откройте файл базы в обычном блокноте, а не в ворд паде. аккуратно в самом начале кода поставьте один знак - любой, хоть точку. нажмите сохранить ) закройте файл. снова откройте в том же блокноте и удалите точку ) сохраните и поробуйте теперь его импортировать. только старую бузу очистите.
======
почему пишу сей способ - потому что был опыт. я работаю в блокноте, друг в ворд паде. ему приходилось мои доки открывать у себя и пересохранять и только потом загружать на сервак. мы недели две ругались из-за этого, пока не поняли в чем дело.
0
milko milko
282
04.02.2014 22:55
еще можно открыть файл в блокноте и сохранить его с другим именем и задать тут же кодировку ютф8. базе же не важно как ее сикуэл называется при импорте ).
0
74ivan74 74ivan74
472
05.02.2014 06:17
milko, не помогло :(
Раньше все без проблем получалось, теперь не хочет и все, в чем дело не пойму.
0
74ivan74 74ivan74
472
05.02.2014 07:22
Вроде нашел решение :
Скрипт, работающий с базой (заполнявший таблицы) никак не устанавливал
кодировку соединения с БД. В результате она оставалась той, что
по-умолчанию применяется для клиентов. А применяется та, которую
используют основатели MySQL AB, шведы по национальности. То есть
европейская latin1 с сопоставлением latin1_swedish_ci.


И сервер естественно полагал, что в него пихают данные latin1 (а вовсе
не windows-1251), и считал своим долгом перед тем как уложить в таблицы в
UTF-8 (тип БД и таблиц) эти данные в UTF-8 из latin1 преобразовать.


Естественно теперь, когда Вы пытаетесь обратиться к данным или снять дамп нормальным клиентом, Вы получаете фигню.

Вот как указать кодировку соединения не знаю :(
0
74ivan74 74ivan74
472
05.02.2014 08:45
ВСЕМ СПАСИБО!!!
Проблему решил добавлением
@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'");
после соединения с базой данных.
0