NForum.RU: windows-1251, UTF-8 - NForum.RU

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

windows-1251, UTF-8 Варианты приучения скрипта дружить с MySQL 4.1.x

#1 Пользователь офлайн   Nixoid 

  • Онлайн
  • Иконка
  • Группа: Супермодераторы
  • Сообщений: 1155
  • Регистрация: 27.01.2006

Отправлено 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 и т.д

Высказываемся...
0


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

Другие ответы в этой теме

#2 Пользователь офлайн   OKC 

  • Завсегдатай
  • Иконка
  • Группа: Суперпользователи
  • Сообщений: 288
  • Регистрация: 14.10.2005

Отправлено Friday, 08.09.2006 - 09:44

качни кодировку windows-1251 на сей мускул и все, либо пользуйся уже руснутой
0

#3 Пользователь офлайн   Nixoid 

  • Онлайн
  • Иконка
  • Группа: Супермодераторы
  • Сообщений: 1155
  • Регистрация: 27.01.2006

Отправлено Friday, 08.09.2006 - 18:44

хорошо, ну а если конфигурирование БД не разрешено? :)
0

#4 Пользователь офлайн   Nixoid 

  • Онлайн
  • Иконка
  • Группа: Супермодераторы
  • Сообщений: 1155
  • Регистрация: 27.01.2006

Отправлено 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'

Пример:
$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-пудово. Кто не в курсе, о чём я пишу, просьба перейти по ссылке и больше в эту тему ни ногой. :)
0

#5 Пользователь офлайн   Nixoid 

  • Онлайн
  • Иконка
  • Группа: Супермодераторы
  • Сообщений: 1155
  • Регистрация: 27.01.2006

Иконки сообщения  Отправлено Thursday, 07.12.2006 - 17:34

Итак, исправляем кодировку в IPB 2.2

Открываем 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");


Сохраняем, работаем и благодарим Nixoid'a
0

#6 Пользователь офлайн   login 

  • Новичок
  • Иконка
  • Группа: Пользователи
  • Сообщений: 1
  • Регистрация: 26.04.2007

Иконки сообщения  Отправлено Thursday, 26.04.2007 - 09:16

Благодарю Nixoid'a за довольно ценную информацию, но есть обратная сторона вопроса: сделал всё по инструкции, всё работает, в базе везде cp1251_general_ci НО на главной странице форума (как впрочем и везде) одни вопросики.... Хотя в базе (phpmyadmin) всё отображается по-русски, как надо. (Форум VB 3.0.1)

Где можеть быть проблема?
0

#7 Пользователь офлайн   Nixoid 

  • Онлайн
  • Иконка
  • Группа: Супермодераторы
  • Сообщений: 1155
  • Регистрация: 27.01.2006

Отправлено Saturday, 28.04.2007 - 11:53

Просмотр сообщенияlogin (26.04.2007, 10:16) писал:

...НО на главной странице форума (как впрочем и везде) одни вопросики.... Хотя в базе (phpmyadmin) всё отображается по-русски, как надо. (Форум VB 3.0.1)

Где можеть быть проблема?

проверь скин. На выходе у тебя скорее всего латиница.
0

#8 Пользователь офлайн   Rohallador 

  • Новичок
  • Иконка
  • Группа: Пользователи
  • Сообщений: 1
  • Регистрация: 23.06.2008

Отправлено Monday, 23.06.2008 - 11:57

Все сделал до того момента, где нужно прописать где-то "SET NAMES 'cp1251'". Где это прописать? У меня связка xampp, т.е. все на локалхосте.
0

#9 Пользователь офлайн   Nixoid 

  • Онлайн
  • Иконка
  • Группа: Супермодераторы
  • Сообщений: 1155
  • Регистрация: 27.01.2006

Отправлено Monday, 23.06.2008 - 23:27

Просмотр сообщенияRohallador (23.06.2008, 12:57) писал:

Все сделал до того момента, где нужно прописать где-то "SET NAMES 'cp1251'". Где это прописать? У меня связка xampp, т.е. все на локалхосте.


Это надо прописать в файле скрипта коннекта к БД.

P.S. Файл скрипта коннкта идет в архиве с форумом, движком и т.д. Найдеш его, найдешь, куда вставить. Это-же примитифф.
0

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему