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, напишите пож. :)
- MySQL Collation, Character Cp1251, universite, 18:40 , 18-Янв-11 (10)
- MySQL Collation, Character Cp1251, pavlinux, 18:57 , 18-Янв-11 (11)
- MySQL Collation, Character Cp1251, kvasik, 17:52 , 20-Янв-11 (12)
> Вот ты себе...Да, не ищем лёгких путей :) Установил клиента на оригинальный Windows :) с него снялся бэкап и веб-интерфейс выдал всю красоту. CP1251 на консоли FreeBSD (с которого ранее снимал бэкап) это все от лукавого :) Но иногда без него не обойтись (vsftpd ru version).
|