The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
MySQL Collation, Character Cp1251, !*! kvasik, 15-Янв-11, 02:29  [смотреть все]
Доброй ночи.
Извечная проблема совместимоти кодировок Win и *Nix снова напомнила о себе :)
Есть сервачок с системой резервного бэкапа на Bacula. Настроено на FreeBSD 8.1 с адаптированной под винду консолью (кодировка Cp1251).
Консольный вариант Bacula отлично выполняет свои функции, в том числе и с опознованием русских имён/путей файлов.

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

Начал думать в сторону MySQL т.к. данные подтягиваются из БД.
Стоит отметить, что SELECT выдает корректные данные с названием папок на кириллице:
mysql> use bacula
mysql> select * from Path;
| 16 | /usr/home/user/Чтение PDF и DJVU/Электронная библиотека/

В нете нашел информацию, что корректное отображение в консоли не гарантирует качество конечного результата. Сделал запрос с указанием Collation:

mysql>  select * from Path order by Path collate cp1251_general_ci;
ERROR 1253 (42000): COLLATION 'cp1251_general_ci' is not valid for CHARACTER SET 'binary'

Однако, перед тем как делать такой запрос, подготовился:

БД была создана с такими параметрами:
CREATE DATABASE ${db_name} CHARACTER SET cp1251 COLLATE cp1251_general_ci;

Таблица с такими параметрами:
CREATE TABLE Path
   (
   PathId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
   Path BLOB NOT NULL,
   PRIMARY KEY(PathId),
   INDEX (Path(255))
   )
   CHARACTER SET cp1251 COLLATE cp1251_general_ci;
  
Да и параметры my.cnf тоже были изменены, результат этих изменений вот:
mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------------+
| Variable_name            | Value                            |
+--------------------------+----------------------------------+
| character_set_client     | cp1251                           |
| character_set_connection | cp1251                           |
| character_set_database   | cp1251                           |
| character_set_filesystem | cp1251                           |
| character_set_results    | cp1251                           |
| character_set_server     | cp1251                           |
| character_set_system     | utf8                             |
| character_sets_dir       | /usr/local/share/mysql/charsets/ |
+--------------------------+----------------------------------+
8 rows in set (0.00 sec)

mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | cp1251_general_ci |
| collation_database   | cp1251_general_ci |
| collation_server     | cp1251_general_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)

Откуда мог взяться в нашей таблице CHARACTER SET 'binary' не могу понять...


  • MySQL Collation, Character Cp1251, !*! NuINu, 11:52 , 15-Янв-11 (1)
    • MySQL Collation, Character Cp1251, !*! kvasik, 00:34 , 16-Янв-11 (2)
      >>проверьте поток тсп от веб сервера и посмотрите что там за символы, есть ли они, в какой они кодировке...

      Что вы имеете ввиду под потоком тсп, как его посмотреть? Страница с веб-интерфейсом на русском языке, он корректно отображается. Фрагмент исходного кода странички, где зафиксированы пути расположения файлов выглядит так:

      <tr>
      <td>drwxr-xr-x</td><td>0  1003</td><td>20-Dec-10 10:51:00</td><td>512 bytes</td>
          <td></td> #-------> здесь должен находится путь, в котором присутствует CP1251, но тут пусто.
          <td>   56  </td>
      </tr>
      <tr>

      <td>-rw-r--r--</td><td>1003  1003</td><td>23-Dec-10 12:23:00</td><td>1.8 MB</td>
          <td>/usr/home/user/soft/snpvw.exe</td> #-------> здесь CP1251 отсутствует и путь отображается.
          <td>   57  </td>
      </tr>

      такие пироги...

  • MySQL Collation, Character Cp1251, !*! pavlinux, 14:36 , 16-Янв-11 (3)
    • MySQL Collation, Character Cp1251, !*! kvasik, 11:35 , 17-Янв-11 (5)
      >> Откуда мог взяться в нашей таблице CHARACTER SET 'binary' не могу понять...
      > Может VARCHAR вместо Блоба?
      > Ну и второе, если системная локаль UTF8, то нафига создавать базы и
      > таблицы в CP1251?
      > Пущай перекодировкой занимаются клиенты.

      Изменил на VARCHAR(500) ситуация изменилась, на веб-интерфейсе уже начали появляться разные символы :) Думаю, ещё поиграться с кодировками и все заработает как надо.
      Системная локаль тоже на CP1251, т.к. приходится крутить виндовозные файлы.

      2NuINu Bat(Bacula Administration Tool) отдельеное приложение, судя по всему, механизм взаимодействия работает несколько иначе, чем веб.


      • MySQL Collation, Character Cp1251, !*! pavlinux, 14:32 , 17-Янв-11 (6)
        • MySQL Collation, Character Cp1251, !*! kvasik, 15:35 , 17-Янв-11 (7)
          >> Системная локаль тоже на CP1251, т.к. ....
          > А выше:
          >> mysql> SHOW VARIABLES LIKE 'character_set%';
          >> ...
          >>| character_set_system     | utf8                             |
          >>

          Этот параметр, если не ошибаюсь, изменить вообще нельзя?
          Подразумевал консоль самой системы.


          • MySQL Collation, Character Cp1251, !*! pavlinux, 15:59 , 17-Янв-11 (8)
            • MySQL Collation, Character Cp1251, !*! kvasik, 18:16 , 18-Янв-11 (9)
              >> Этот парам...

              Скорее всего, заставить отображать пути директорий с кодировкой CP1251 пока так и не получится.

              При бэкапе данные заносятся в базу под пользователем bacula, кодировка для клиентов установлена CP1251. Другую кодировку указать нельзя, т.к. система содержит пути файлов в CP1251. Внесённые данные успешно просматриваются при коннекте mysql в cmd.exe с установкой chcp1251.

              Webacula понимает только UTF8 и пытается тянуть данные из этой базы.

              P.S. если указать в .htacces кодировку CP1251 для страницы по умолчанию, ситуация с путями директорий не поменяется.
              P.P.S если кто знает как заставить понимать Webacula CP1251, напишите пож. :)





Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру