Проблема с кодировкой.

MySQL/PostgreSQL/SQLite/Oracle/M$SQL/....

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
dyatlovm
рядовой
Сообщения: 34
Зарегистрирован: 2008-09-07 10:35:03
Откуда: г. Москва

Проблема с кодировкой.

Непрочитанное сообщение dyatlovm » 2009-01-26 18:32:21

Друзья выручайте, бьюсь уже третий день на проблемой.
Есть вот такой вот продукт Owl Intranet Engine - система электронного хранения документов.
Система такая:

Код: Выделить всё

pkg_info | grep mysql
mysql-client-4.1.22_1 Multithreaded SQL database (client)
mysql-server-4.1.22_1 Multithreaded SQL database (server)

Код: Выделить всё

 cat /etc/my.cnf |grep char
default-character-set=cp1251
default-character-set=cp1251
Дамп базы был в комплекте.
Проблема в следующем, при попытке создать русскоязычную папку или файл выдает вопросы. Пытался следовать советам zg по статье http://www.lissyara.su/?id=1655 ничего не хорошего не получилось.
С кодировками имею дело в первый раз, так что сильно не пинайте.
Заранее благодарен.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Проблема с кодировкой.

Непрочитанное сообщение zg » 2009-01-26 19:23:43

dyatlovm писал(а):Дамп базы был в комплекте.
и в какой кодировке?

дай вывод

Код: Выделить всё

mysql -e'show variables like "char%"'
и грепни дамп на предмет установки кодировок

Код: Выделить всё

grep -i 'set names' dump.sql
ну и вывод какой-нить таблички выложи

Код: Выделить всё

mysql -e 'show create table `dbname`.`table`\G'

Аватара пользователя
thefree
лейтенант
Сообщения: 980
Зарегистрирован: 2008-12-29 9:23:19
Откуда: Весёлая Страна

Re: Проблема с кодировкой.

Непрочитанное сообщение thefree » 2009-01-26 19:41:21

Не судите меня строго, Я не волшебник, а только учусь!
http://planetbsd.ru - RSS-агрегатор *BSD по Рунету

dyatlovm
рядовой
Сообщения: 34
Зарегистрирован: 2008-09-07 10:35:03
Откуда: г. Москва

Re: Проблема с кодировкой.

Непрочитанное сообщение dyatlovm » 2009-01-26 22:24:08

Код: Выделить всё

 mysql -u root -p -e'show variables like "char%"'
Enter password:
+--------------------------+----------------------------------+
| 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/ |
+--------------------------+----------------------------------+
В дампе по умолчанию про кодировки не слова. Похоже что задаются системой при создании базы.

Код: Выделить всё

mysql> show create table `intranet`.`folders`\G
*************************** 1. row ***************************
       Table: folders
Create Table: CREATE TABLE `folders` (
  `id` int(4) NOT NULL auto_increment,
  `name` varchar(255) NOT NULL default '',
  `parent` int(4) NOT NULL default '0',
  `description` text NOT NULL,
  `security` varchar(5) NOT NULL default '',
  `groupid` int(4) NOT NULL default '0',
  `creatorid` int(4) NOT NULL default '0',
  `password` varchar(50) NOT NULL default '',
  `smodified` datetime default NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `folderid_index` (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=cp1251
1 row in set (0.00 sec)
В настройках есть описание подключения к базе данных, но там опять таки не слова о кодировке. :cry:
Единственное где задается кодировка, это конфигурационный файл, но насколько я понимаю строка

Код: Выделить всё

$default->charset = "UTF-8";
отвечает за отображение страницы. Если не прав, извиняюсь :oops:

При настройке my.cnf

Код: Выделить всё

mysql-client-4.1.22_1 Multithreaded SQL database (client)
mysql-server-4.1.22_1 Multithreaded SQL database (server)
и залитии дампа по умолчанию при попытке создать что либо появляется
: Invalid SQL: SELECT * FROM folders WHERE name = 'ЊЅµ' and parent = '1'
: 1267 (Illegal mix of collations (cp1251_general_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '=')
Session halted.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Проблема с кодировкой.

Непрочитанное сообщение zg » 2009-01-27 0:20:02

dyatlovm писал(а):latin1_swedish_ci
гм.. не с неба же он её взял -))) где-то прописана

грепни скрипт на пердмет latin1

Код: Выделить всё

grep -ir latin1 /path/to/script/

dyatlovm
рядовой
Сообщения: 34
Зарегистрирован: 2008-09-07 10:35:03
Откуда: г. Москва

Re: Проблема с кодировкой.

Непрочитанное сообщение dyatlovm » 2009-01-27 7:38:33

Просмотрел все скрипты, ни в одном из них ни слова о latin1 или о latin1_swedish_ci

Аватара пользователя
Volodymyr
лейтенант
Сообщения: 614
Зарегистрирован: 2008-06-17 16:04:56
Откуда: Ukraine, Lviv
Контактная информация:

Re: Проблема с кодировкой.

Непрочитанное сообщение Volodymyr » 2009-01-27 13:24:29

dyatlovm писал(а):Просмотрел все скрипты, ни в одном из них ни слова о latin1 или о latin1_swedish_ci
Єто дефолтовая кодировка с которой собирается Мускул если при сборке не задаьть опций. Можно попробовать задать кодировку при старте в конфиге. Ну или просто пересобрать с нужніми ключами. Я свой собираю так (мне надо utf8 для ороботы, его и указываю)

Код: Выделить всё

cd /usr/ports/databases/mysql51-server/ && make install WITH_CHARSET=utf8 WITH_XCHARSET=all WITH_COLLATION=utf8_bin BUILD_OPTIMIZED=yes BUILD_STATIC=yes clean
Соотвецтвенно все что происходит по умолчанию или без параметров о кодировке происходив в utf8.

dyatlovm
рядовой
Сообщения: 34
Зарегистрирован: 2008-09-07 10:35:03
Откуда: г. Москва

Re: Проблема с кодировкой.

Непрочитанное сообщение dyatlovm » 2009-01-27 15:00:45

Мне кажется что дефолтовые значения для сервера и клиента задаются вот так:

Код: Выделить всё

mysql-client-4.1.22_1 Multithreaded SQL database (client)
mysql-server-4.1.22_1 Multithreaded SQL database (server)
Только вот откуда взялось litin1? Вот в чем вопрос :)

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Проблема с кодировкой.

Непрочитанное сообщение zg » 2009-01-27 17:25:07

dyatlovm писал(а):Только вот откуда взялось litin1?
а что за скрипт юзаешь? можешь ссылку дать или исходники выложить?

dyatlovm
рядовой
Сообщения: 34
Зарегистрирован: 2008-09-07 10:35:03
Откуда: г. Москва

Re: Проблема с кодировкой.

Непрочитанное сообщение dyatlovm » 2009-01-27 17:30:33

zg писал(а):
dyatlovm писал(а):Только вот откуда взялось litin1?
а что за скрипт юзаешь? можешь ссылку дать или исходники выложить?
Documents Managment System
http://sourceforge.net/projects/owl/ Owl 0.9x

Аватара пользователя
Volodymyr
лейтенант
Сообщения: 614
Зарегистрирован: 2008-06-17 16:04:56
Откуда: Ukraine, Lviv
Контактная информация:

Re: Проблема с кодировкой.

Непрочитанное сообщение Volodymyr » 2009-01-27 20:03:50

dyatlovm писал(а):Мне кажется что дефолтовые значения для сервера и клиента задаются вот так:

Код: Выделить всё

mysql-client-4.1.22_1 Multithreaded SQL database (client)
mysql-server-4.1.22_1 Multithreaded SQL database (server)
Только вот откуда взялось litin1? Вот в чем вопрос :)
Извени, а где в этом примере задаются кодировки?

dyatlovm
рядовой
Сообщения: 34
Зарегистрирован: 2008-09-07 10:35:03
Откуда: г. Москва

Re: Проблема с кодировкой.

Непрочитанное сообщение dyatlovm » 2009-01-27 20:22:57

Volodymyr писал(а):
dyatlovm писал(а):Мне кажется что дефолтовые значения для сервера и клиента задаются вот так:

Код: Выделить всё

mysql-client-4.1.22_1 Multithreaded SQL database (client)
mysql-server-4.1.22_1 Multithreaded SQL database (server)
Только вот откуда взялось litin1? Вот в чем вопрос :)
Извени, а где в этом примере задаются кодировки?
Блин, запарился. Вот что я хотел привести

Код: Выделить всё

cat /etc/my.cnf |grep char
default-character-set=cp1251
default-character-set=cp1251
Первое для клиента, второе для сервера.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Проблема с кодировкой.

Непрочитанное сообщение zg » 2009-01-27 21:22:55

dyatlovm писал(а):Documents Managment System
гм.. муть какая -)))

сковырнул из db_mysql.inc

Код: Выделить всё

    @mysql_query("SET NAMES 'utf8';", $this->Link_ID);
    @mysql_query("SET CHARACTER SET 'utf8';", $this->Link_ID);
скрипт работает в UTF-8...

гм.. попробовал добавить кактлог - русские буквы игнорируются, в дескрипшин идут вопросики. Это скрипт кривой, а не кодировки виноваты. Ща посмотрю, где собака порылась -)))

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Проблема с кодировкой.

Непрочитанное сообщение zg » 2009-01-27 21:59:10

:ROFL: весёлые ребята пишут этот проект

Код: Выделить всё

      $name = trim(fOwl_ereg_replace("[^$default->list_of_valid_chars_in_file_names]", "", fOwl_ereg_replace("%20|^-", "_", $name)));
короче это не скрипт а решето из костылей

при выключенных кавычках скрипт работать не будет, поэтому шестой пхп ему не светит.

С utf-8 его продружить можно, но костыли, которые они понаставили нервов попортят.

dyatlovm
рядовой
Сообщения: 34
Зарегистрирован: 2008-09-07 10:35:03
Откуда: г. Москва

Re: Проблема с кодировкой.

Непрочитанное сообщение dyatlovm » 2009-01-28 12:15:07

шестой пхп и мне не светит))
а вот к 5 хотелось бы прикрутить, я мало что понимаю в пхп, только сейчас начинаю разбираться
Спасибо за ответы, буду думать дальше, если получится, то может и статейка накатаю, может кого заинтересует.
Погуглил по вопросу хранения эл. документов и выдачи юзерам их, нашел только англоязычные проекты, ни один из опробованных мной не поддерживает cp1251, остановился на этом, решил довести до конца дело.
Еще раз спасибо!

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Проблема с кодировкой.

Непрочитанное сообщение zg » 2009-01-28 15:04:51

dyatlovm писал(а):решил довести до конца дело.
этот проект туп как пробка, а делали его люди, которые не понимают вообще ничего из области безопасного программирования.

Найденные мой проблемы:
1. Проект сделан с претензией на xhtml, но заголовок передаёт через http-equiv, из-за этого браузер выставляет кодировку по умолчанию - обычно latin1 (cp1252). Из-за этого данные вносятся в базу чёрти как.
2. Проект не использует настройку локалей
3. Проект не умеет работать со строками в UTF-8, нужно переделывать все функции на проверку валидности вводимых пользователем данных.

Первую проблему я решил путём удаления из файла lib/header.inc строки с эквивом и раскомментировал фнукцию по отвправке заголовка

Код: Выделить всё

header("Content-Type: text/html;charset=$default->charset");
Вторая проблема решается через установку локали в файле config/owl.php (в начало файла добавить):

Код: Выделить всё

setlocale(LC_ALL, 'Russian_Russia.65001', 'ru_RU.UTF-8');
Третья проблема решается через кол, который нужно вбить авторам этого скрипта.

dyatlovm
рядовой
Сообщения: 34
Зарегистрирован: 2008-09-07 10:35:03
Откуда: г. Москва

Re: Проблема с кодировкой.

Непрочитанное сообщение dyatlovm » 2009-01-28 16:14:34

zg огромное спасибо за помощь в толковании данной проблемы, наверное буду искать более приемлемый вариант решения моей задачи.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Проблема с кодировкой.

Непрочитанное сообщение zg » 2009-01-28 16:32:00

-))) если что, пиши -))) поможем чем сможем