1 (изменено: akcium, 2009-01-13 20:12:01)

Тема: вопрос про кодировку

Здравствуйте, существует проблема, в базе русский текст выглядит как: проигрыватели
на сайте все нормально, хотя и существует проблема с "Ш" и "И"
в базе редактирование русского текста невозможно.

пример

CREATE TABLE `e_categories` (
  `id` int(11) NOT NULL auto_increment,
  `parent_id` int(11) NOT NULL default '0',
  `module` varchar(15) default NULL,
  `title` tinytext character set cp1251 NOT NULL,
  `is_newwindow` tinyint(1) default '0',
  `is_active` tinyint(1) NOT NULL default '0',
  `lang` char(2) default 'et',
  `rank` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;

--
-- Дамп данных таблицы `e_categories`
--

INSERT INTO `e_categories` (`id`, `parent_id`, `module`, `title`, `is_newwindow`, `is_active`, `lang`, `rank`) VALUES (3, 0, 'eshop', 'Мобильные телефоны', 0, 1, 'et', 0),
(4, 0, 'eshop', 'Р?РіСЂС‹', 0, 1, 'et', 0),
(5, 0, 'eshop', 'Мониторы', 0, 1, 'et', 0),
(6, 0, 'eshop', 'MP3 проигрыватели', 0, 1, 'et', 0),
(7, 0, 'eshop', 'Память (флеС?РєРё)', 0, 1, 'et', 0);

в базе так же используются utf8_general_ci, utf8_unicode_ci как можно это исправить?

2

Re: вопрос про кодировку

akcium
У вас проблема с кодировкой соединения с MySQL.

Покажите вывод SQL запроса:

SHOW GLOBAL VARIABLES LIKE 'char%';

Вернуть кириллицу можно только перекодировав дамп и выставив корректные кодировки.
Уточните, в какой кодировке страницы сайта?
Есть ли доступ к конфигурационному файлу MySQL (my.cnf)?

3 (изменено: akcium, 2009-01-14 17:12:32)

Re: вопрос про кодировку

на денвере не показывает, на сервере выдает:

character_set_client    latin1
character_set_connection    latin1
character_set_database    latin1
character_set_filesystem    binary
character_set_results    latin1
character_set_server    latin1
character_set_system    utf8
character_sets_dir    /usr/local/share/mysql/charsets/

доступ к my.cnf есть
сайт в utf8

4

Re: вопрос про кодировку

В my.cnf, раздел [mysqld] добавьте строку:

init-connect="SET NAMES utf8"

Это установит кодировку соединения с MySQL в utf8.

На почту отправил скрипт перекодировки дампа с инструкцией его использования.

5

Re: вопрос про кодировку

в любом случае скрип выводит Error: Detected an illegal character.
init-connect="SET NAMES utf8" не спасает((

6

Re: вопрос про кодировку

akcium
На сервере есть iconv? Смотрите в phpinfo.

<?php phpinfo(); ?>

От чего не спасает init-connect?
Смотрите: SHOW GLOBAL VARIABLES LIKE 'char%';

7

Re: вопрос про кодировку

iconv есть

8

Re: вопрос про кодировку

akcium
Установите галочку "Illegal Characters" и попробуйте TRANSLIT или IGNORE.

9

Re: вопрос про кодировку

конечно я пробовал (

10

Re: вопрос про кодировку

akcium
Если дамп не больше 10МБ, то вышлите запакованный в zip на hanut@php-myadmin.ru. Попробую сделать. Для пробы можете только кусочек с крякозябами прислать. Только кодировку файла в utf8 сохраните.

11

Re: вопрос про кодировку

отправил

12

Re: вопрос про кодировку

У меня почти такая же проблема sad
На форуме (vB 3.7.4) и в базе данных вопросики.
Кусок my.ini

[client]
port=3306
[mysql]
default-character-set=cp1251
[mysqld]
port=3306
basedir="C:/Program Files/MySQL/MySQL Server 5.0/"
datadir="C:/Program Files/MySQL/MySQL Server 5.0/Data/"
default-character-set=cp1251

SHOW GLOBAL VARIABLES LIKE 'char%';

character_set_client     cp1251
character_set_connection cp1251
character_set_database   cp1251
character_set_filesystem binary
character_set_results    cp1251
character_set_server     cp1251
character_set_system     utf8
character_sets_dir C:\Program Files\MySQL\MySQL Server 5.0\share\charsets\

Мои действия:
Создал нового юзера, дал ему привилегии (структура и данные),
создал пустую базу:
CREATE DATABASE `forum` DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci;
Установил форум, результат - вопросики на самом форуме и в базе sad

Устанавливаю на локалхост

Сервер: localhost via TCP/IP
Версия сервера: 5.0.67-community-nt
Версия протокола: 10
Пользователь: root@localhost
MySQL-кодировка: UTF-8 Unicode (utf8)
Веб-сервер
Apache/2.2.10 (Win32) PHP/5.2.1
Версия MySQL-клиента: 5.0.22
PHP расширение: mysqli
phpMyAdmin
Информация о версии: 3.1.1

Что я делаю не так?
Караул!!! Помогите!!!

13

Re: вопрос про кодировку

В конфигурационном файле форума (config.php), установите следующие настройки:
$config['Database']['dbtype'] = 'mysqli';
$config['Mysqli']['charset'] = 'cp1251';

Форум необходимо переустановить заново, таблицы от предыдущей установки удалите.

14

Re: вопрос про кодировку

Доброго времени суток,

Проблема схожая с 1-м постом,

лог init-connect="SET NAMES utf8"

Variable_name    Value
character_set_client    cp1251
character_set_connection    cp1251
character_set_database    cp1251
character_set_results    cp1251
character_set_server    cp1251
character_set_system    utf8
character_sets_dir    /usr/local/share/mysql/charsets/

База расположена у хостера, поэтому возможности редактировать конфиги (по крайней мере на прямую нет).

Что посоветуете?

15

Re: вопрос про кодировку

В дополнение к предыдущему вопросу, дополнения:

Кодировка сайта UTF8
Доступ к my.cnf нет, работаю из консоли, база у хостера

16

Re: вопрос про кодировку

ripev
А что конкретно требуется? У вас форум, движок, или что?

Можно попробовать сразу после функции mysql_connect() добавить строку:

mysql_query('SET NAMES utf8');

Это установит кодировку соединения с MySQL в utf8.

Крякозябы из БД не исчезнут, их надо перекодировать, если необходимо сохранить, конечно.

17 (изменено: AlexeyF, 2009-01-22 07:52:10)

Re: вопрос про кодировку

Hanut сказал:

В конфигурационном файле форума (config.php), установите следующие настройки:
$config['Database']['dbtype'] = 'mysqli';
$config['Mysqli']['charset'] = 'cp1251';

Форум необходимо переустановить заново, таблицы от предыдущей установки удалите.

Первая строчка у меня была.
Вторую - $config['Mysqli']['charset'] = 'cp1251'; добавил.
Таблицы удалил, форум переставил - не помогло.
Приближаюсь к нервному срыву sad
Кто виноват? Что делать???

P.S.
Измерил кривизну своих рук.
Вроде в пределах допустимого...

P.P.S.
Попробовал поставить форум PunBB - кириллица отбражается нормально!

18 (изменено: AlexeyF, 2009-01-22 10:50:12)

Re: вопрос про кодировку

Решил следующим образом:
1. Изменил в my.ini кодировку на utf8

[client] 
port=3306 
character-sets-dir="C:/Program Files/MySQL/MySQL Server 5.0/share/charsets" 
[mysql] 
default-character-set=utf8 
[mysqld] 
default-character-set=utf8

SHOW GLOBAL VARIABLES LIKE 'char%';
Было:

character_set_client        cp1251 
character_set_connection cp1251 
character_set_database   cp1251 
character_set_filesystem  binary 
character_set_results      cp1251 
character_set_server       cp1251 
character_set_system      utf8

Стало:

character_set_client         utf8 
character_set_connection utf8 
character_set_database   utf8 
character_set_filesystem  binary 
character_set_results       utf8 
character_set_server       utf8 
character_set_system      utf8

2. Создал нового пользователя, дал ему привилегии только на структуру и данные.
3. Указал этого пользователя вместо root в конфиге форума.
4. Расскоментировал в конфиге форума строку $config['Mysqli']['charset'] = 'utf8';
5. При создании базы выбрал сравнение utf8_general_ci
6. Установил форум в кодировке utf8.

Спасибо за советы и помощь.

P.S.
C cp1251 нифига не получилось sad

http://forum.profintel.ru//files/2_221.jpg

http://forum.profintel.ru//files/1_313.jpg

19

Re: вопрос про кодировку

AlexeyF
Должно было получиться и с cp1251. Вы скрипт под root запускали?

20

Re: вопрос про кодировку

Hanut сказал:

ripev
А что конкретно требуется? У вас форум, движок, или что?

У меня сайт с CMS e107 в UTP8 и база MySQL.
На сайте отображается все корректно, в базе крякозябри.

Слабо разбираюсь в php и SQL, поэтому вопрос

[b]Код:[/b]

mysql_query('SET NAMES utf8');

это куда писать?

Крякозябы из БД не исчезнут, их надо перекодировать, если необходимо сохранить, конечно.

Сохранить обязательно, как произвести процедуру перкодирования?

21

Re: вопрос про кодировку

ripev
Конкретно по вашей CMS, я не знаю есть ли там в настройках возможность установить кодировку соединения с MySQL. Уточните в документации, или на форуме пользователей CMS.

Перекодировать бывает сложно, а порой и невозможно. Сперва создайте дамп с помощью phpMyAdmin. Затем откройте его нормальным текстовым редактором (Notepad++, например) и посмотрите как выглядит кириллица. Покажите как она выглядит, или отправьте небольшой кусочек дампа на hanut@php-myadmin.ru, попробую его перекодировать и если получится, объясню как это сделать.

22

Re: вопрос про кодировку

Hanut сказал:

Перекодировать бывает сложно, а порой и невозможно. Сперва создайте дамп с помощью phpMyAdmin. Затем откройте его нормальным текстовым редактором (Notepad++, например) и посмотрите как выглядит кириллица. Покажите как она выглядит, или отправьте небольшой кусочек дампа на hanut@php-myadmin.ru, попробую его перекодировать и если получится, объясню как это сделать.

Если я правильно понимаю под дампом экспорт, тогда вот кусок:

INSERT INTO `e107_comments` (`comment_id`, `comment_pid`, `comment_item_id`, `comment_subject`, `comment_author`, 
(4, 0, 28, 'бабло попеждает зло', '3.ripev', '', 1232528083, 'На сколько я понимаю это новые "евро" манаты?', 0, 'd5dd2fe6', 'mgal', 0);

23

Re: вопрос про кодировку

ripev
Скрипт перекодировки отослал. Только имейте в виду, что перекодировка даст результат только при установке корректной кодировки соединения с MySQL.

24

Re: вопрос про кодировку

Hanut
В общем я еще не разбираюсь в PHP поэтому я сделал по другому.
Добавил в php скрипт отвечающий за работу с базой строку:
mysql_query("SET CHARACTER SET 'utf8'");
И все данные в базе пересохранил в utf8

25 (изменено: Hanut, 2009-02-20 15:48:38)

Re: вопрос про кодировку

А можно мне тоже на почту ilyatim@gmail.com скрипт для перекодировки дампа?
Отослал. Hanut.