Страница 1 из 1
windows-1251, UTF-8 Варианты приучения скрипта дружить с MySQL 4.1.x
#1
Отправлено Wednesday, 06.09.2006 - 09:11
Хотелось-бы узнать, кто как справляется в извесных скриптах, которые не предназначены к работе с MySQL 4.1 (UTF-8), с проблеммой вывода данных из таблиц? Меня интересут кодировка. Какие варианты есть вообще.
Предлагаю обсудить следующие скрипты: IPB 2.1.x, Vb 3.6.0, SMF (all version), PHP-Nuke, SLAED, RusCMS и т.д
Высказываемся...
Предлагаю обсудить следующие скрипты: IPB 2.1.x, Vb 3.6.0, SMF (all version), PHP-Nuke, SLAED, RusCMS и т.д
Высказываемся...
Страница 1 из 1
Другие ответы в этой теме
#4
Отправлено Sunday, 10.09.2006 - 22:23
В базе данных MySQL с версии 4.1.х и новых версиях phpMyAdmin (с 2.6.0) внедрена расширенная поддержка юникод кодировок (UTF-8) и расширенные возможности для установки кодировок (к примеру теперь можно установить кодировку на каждую таблицу в отдельности). К сожалению на национальных (в том числе кириллических) кодировках некоторые из нововведений с расширенными возможностями кодировок могут вызвать некоторые проблемы. Данные внутри сервера БД теперь хранятся в кодировке utf-8, что позволяет пользователю оперировать данными в его БД так, как ему необходимо. Принципиально это большой плюс, но однако многие веб-разработчики уже столкнулись с проблемой смешения кодировок, когда на сайтах вместо русских букв выводятся (???) либо текст выводится не в той кодировке, которой нужно. И дело тут не в сервере БД, а в адаптированности к этому самих скриптов, многие из которых пока не умеют корректно работать с теми расширенными возможностями, предоставляемыми новыми версиями БД MySQL.
Исправить положение для кириллицы может прописывание в файле коннекта скрипта к базе данных ДО всех запросов SQL-команды SET NAMES 'cp1251' (тем самым данные при запросе или при записи будут преобразованы в эту кодировку). Ниже мы приводим более избыточный алгоритм для решения подобных проблем (при наличии у вас копии БД) на примере для кодировки win-1251:
1) Убедитесь, что дамп для восстановления или создания базы сделан в одной, нужной кодировке, например, win cp-1251. Проверьте чтобы в дампе НЕ БЫЛО значений в разных кодировках.
2) Сотрите всю базу данных (drop) на сервере
3) На стартовой странице phpMyAdmin выберите кодировку сравнения cp-1251 (сp-1251_general_ci).
4) Создайте базу либо закачайте структурный дамп БЕЗ данных и установите для таблиц кодировку сравнения сp-1251_general_ci.
5) Теперь залейте дамп с данными, НЕ забыв указать кодировку дампа (в phpMyAdmin в выпадающем списке кодировок возле окна с именем загружаемового дамп-файла)
6) После заливки данных проверьте кодировку сравнения у всех созданных таблиц. Проверьте что-бы в базе данных не было записей в посторонних кодировках!
В коннекте к базе пропишите следующую SQL-команду:
SET NAMES 'cp1251'
Пример:
При выгрузке данных из MySQL 4.1.x через phpmyadmin кириллические символы отображаются в виде (ГЂГäðååâГГ) - это не является проблемой, так как выгруженные данные находятся в кодировке utf-8 (в этой кодировке они хранятся в базе). Преобразовать такой дамп например в win-1251 достаточно просто - для этого можно использовать любой текстовый редактор, обеспечивающем корректную работу с кодировкой utf-8 (например GridinSoft Notepad или UltraEdit). Да, это несколько усложняет работу с данными в национальных кодировках, однако к этому придётся привыкнуть и переписать свои скрипты так, что была совместимость с новыми версиями БД MySQL, так как дальнейшее развитие БД MySQL будет идти именно по такому пути, и возврата назад нет.
P.S. Работает 100-пудово. Кто не в курсе, о чём я пишу, просьба перейти и больше в эту тему ни ногой. :)
Исправить положение для кириллицы может прописывание в файле коннекта скрипта к базе данных ДО всех запросов SQL-команды SET NAMES 'cp1251' (тем самым данные при запросе или при записи будут преобразованы в эту кодировку). Ниже мы приводим более избыточный алгоритм для решения подобных проблем (при наличии у вас копии БД) на примере для кодировки win-1251:
1) Убедитесь, что дамп для восстановления или создания базы сделан в одной, нужной кодировке, например, win cp-1251. Проверьте чтобы в дампе НЕ БЫЛО значений в разных кодировках.
2) Сотрите всю базу данных (drop) на сервере
3) На стартовой странице phpMyAdmin выберите кодировку сравнения cp-1251 (сp-1251_general_ci).
4) Создайте базу либо закачайте структурный дамп БЕЗ данных и установите для таблиц кодировку сравнения сp-1251_general_ci.
5) Теперь залейте дамп с данными, НЕ забыв указать кодировку дампа (в phpMyAdmin в выпадающем списке кодировок возле окна с именем загружаемового дамп-файла)
6) После заливки данных проверьте кодировку сравнения у всех созданных таблиц. Проверьте что-бы в базе данных не было записей в посторонних кодировках!
В коннекте к базе пропишите следующую SQL-команду:
SET NAMES 'cp1251'
Пример:
$conn = mysql_connect($this->host, $this->user, $this->password);
mysql_select_db($this->dbname, $db);
mysql_query("SET NAMES 'cp1251'");
$result = mysql_query($sql);
return $result;
mysql_close($conn);При выгрузке данных из MySQL 4.1.x через phpmyadmin кириллические символы отображаются в виде (ГЂГäðååâГГ) - это не является проблемой, так как выгруженные данные находятся в кодировке utf-8 (в этой кодировке они хранятся в базе). Преобразовать такой дамп например в win-1251 достаточно просто - для этого можно использовать любой текстовый редактор, обеспечивающем корректную работу с кодировкой utf-8 (например GridinSoft Notepad или UltraEdit). Да, это несколько усложняет работу с данными в национальных кодировках, однако к этому придётся привыкнуть и переписать свои скрипты так, что была совместимость с новыми версиями БД MySQL, так как дальнейшее развитие БД MySQL будет идти именно по такому пути, и возврата назад нет.
P.S. Работает 100-пудово. Кто не в курсе, о чём я пишу, просьба перейти и больше в эту тему ни ногой. :)
#5
Отправлено Thursday, 07.12.2006 - 17:34
Итак, исправляем кодировку в IPB 2.2
Открываем ips_kernel/class_db_mysql_client.php
Ищем:
Вставляем после:
Сохраняем, работаем и благодарим
Открываем ips_kernel/class_db_mysql_client.php
Ищем:
if ( ! mysql_select_db($this->obj['sql_database'], $this->connection_id) )
{
$this->fatal_error();
return FALSE;
}Вставляем после:
mysql_query("set CHARACTER SET cp1251");Сохраняем, работаем и благодарим
#6
Отправлено Thursday, 26.04.2007 - 09:16
Благодарю Nixoid'a за довольно ценную информацию, но есть обратная сторона вопроса: сделал всё по инструкции, всё работает, в базе везде cp1251_general_ci НО на главной странице форума (как впрочем и везде) одни вопросики.... Хотя в базе (phpmyadmin) всё отображается по-русски, как надо. (Форум VB 3.0.1)
Где можеть быть проблема?
Где можеть быть проблема?
#7
Отправлено Saturday, 28.04.2007 - 11:53
#9
Отправлено Monday, 23.06.2008 - 23:27
Rohallador (23.06.2008, 12:57) писал:
Все сделал до того момента, где нужно прописать где-то "SET NAMES 'cp1251'". Где это прописать? У меня связка xampp, т.е. все на локалхосте.
Это надо прописать в файле скрипта коннекта к БД.
P.S. Файл скрипта коннкта идет в архиве с форумом, движком и т.д. Найдеш его, найдешь, куда вставить. Это-же примитифф.
Страница 1 из 1
Стальной металлопрокат цена.

Вход
Регистрация
Помощь
Цитата