The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"MySQL Collation, Character Cp1251"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (MySQL)
Изначальное сообщение [ Отслеживать ]

"MySQL Collation, Character Cp1251"  +/
Сообщение от kvasik (ok) on 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' не могу понять...


Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "MySQL Collation, Character Cp1251"  +/
Сообщение от NuINu (??) on 15-Янв-11, 11:52 

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

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "MySQL Collation, Character Cp1251"  +/
Сообщение от kvasik (ok) on 16-Янв-11, 00:34 
>>проверьте поток тсп от веб сервера и посмотрите что там за символы, есть ли они, в какой они кодировке...

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

<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>

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

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

4. "MySQL Collation, Character Cp1251"  +/
Сообщение от NuINu (??) on 16-Янв-11, 15:35 

> <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, но
> тут пусто.
> </tr>
> такие пироги...

тогда о каких вопросиках при использовании некоего Bat идет речь?

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

3. "MySQL Collation, Character Cp1251"  +/
Сообщение от pavlinux (ok) on 16-Янв-11, 14:36 
> Откуда мог взяться в нашей таблице CHARACTER SET 'binary' не могу понять...

Path BLOB NOT NULL,


A BLOB is a binary large object that can hold a variable amount of data.
BLOB values are treated as binary strings (byte strings).

Может VARCHAR вместо Блоба?

Ну и второе, если системная локаль UTF8, то нафига создавать базы и таблицы в CP1251?
Пущай перекодировкой занимаются клиенты.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

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

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

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


Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

6. "MySQL Collation, Character Cp1251"  +/
Сообщение от pavlinux (ok) on 17-Янв-11, 14:32 
> Системная локаль тоже на CP1251, т.к. ....

А выше:
> mysql> SHOW VARIABLES LIKE 'character_set%';
> ...
>| character_set_system     | utf8                             |
>

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "MySQL Collation, Character Cp1251"  +/
Сообщение от kvasik (ok) on 17-Янв-11, 15:35 
>> Системная локаль тоже на CP1251, т.к. ....
> А выше:
>> mysql> SHOW VARIABLES LIKE 'character_set%';
>> ...
>>| character_set_system     | utf8                             |
>>

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


Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "MySQL Collation, Character Cp1251"  +/
Сообщение от pavlinux (ok) on 17-Янв-11, 15:59 
>>> Системная локаль тоже на CP1251, т.к. ....
>> А выше:
>>> mysql> SHOW VARIABLES LIKE 'character_set%';
>>> ...
>>>| character_set_system     | utf8                             |
>>>
> Этот параметр, если не ошибаюсь, изменить вообще нельзя?

Можно, но не нужно :)
> Подразумевал консоль самой системы.

http://www.lissyara.su/articles/freebsd/www/mysql_charsets/

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

9. "MySQL Collation, Character Cp1251"  +/
Сообщение от kvasik (ok) on 18-Янв-11, 18:16 
>> Этот парам...

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

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

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

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


Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

10. "MySQL Collation, Character Cp1251"  +/
Сообщение от universite email(ok) on 18-Янв-11, 18:40 
>>> Этот парам...
> Скорее всего, заставить отображать пути директорий с кодировкой CP1251 пока так и
> не получится.

воспользуйтесь iconv


Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

11. "MySQL Collation, Character Cp1251"  +/
Сообщение от pavlinux (ok) on 18-Янв-11, 18:57 
>[оверквотинг удален]
> Скорее всего, заставить отображать пути директорий с кодировкой CP1251 пока так и
> не получится.
> При бэкапе данные заносятся в базу под пользователем bacula, кодировка для клиентов
> установлена CP1251. Другую кодировку указать нельзя, т.к. система содержит пути файлов
> в CP1251. Внесённые данные успешно просматриваются при коннекте mysql в cmd.exe
> с установкой chcp1251.
> Webacula понимает только UTF8 и пытается тянуть данные из этой базы.
> P.S. если указать в .htacces кодировку CP1251 для страницы по умолчанию, ситуация
> с путями директорий не поменяется.
> P.P.S если кто знает как заставить понимать Webacula CP1251, напишите пож. :)

Вот ты себе гимор придумал. Говорю же гони всё в UTF8, и локаль FreeBSD тоже.
а  Webacula это всего лишь вебприложение и перекодировка выставляется в браузере.

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

12. "MySQL Collation, Character Cp1251"  +/
Сообщение от kvasik (ok) on 20-Янв-11, 17:52 
> Вот ты себе...

Да, не ищем лёгких путей :)
Установил клиента на оригинальный Windows :) с него снялся бэкап и веб-интерфейс выдал всю красоту.
CP1251 на консоли FreeBSD (с которого ранее снимал бэкап) это все от лукавого :)
Но иногда без него не обойтись (vsftpd ru version).


Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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