Сегодня коллеги попросили помочь разобраться с проблемой: при отправке данных в OCS агент получал в ответ ошибку с кодом 500. После включения логирования ошибок (нужно в конфиге выставить OCS_OPT_DBI_PRINT_ERROR в 1) в логах появились следующие ошибки:
DBD::mysql::db do failed: Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '=' at /usr/local/share/perl/5.10.1/Apache/Ocsinventory/Server/Inventory/Cache.pm line 34.
Вот на этом месте OCS спотыкается:
# sed '260,265p;d' /usr/local/share/perl/5.10.1/Apache/Ocsinventory.pm # Retrieve Device if exists $request = $CURRENT_CONTEXT{'DBI_HANDLE'}->prepare(' SELECT DEVICEID,ID,UNIX_TIMESTAMP(LASTCOME) AS LCOME,UNIX_TIMESTAMP(LASTDATE) AS LDATE,QUALITY,FIDELITY FROM hardware WHERE DEVICEID=?' ); unless($request->execute($CURRENT_CONTEXT{'DEVICEID'})){
Ну тут всё понятно - имя в кириллице, меняем на латиницу - всё работает. Проблема локализована. А чтобы OCS могла импортировать имена в кириллице нужно немного поправить БД:
ALTER TABLE `ocs`.`hardware` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; ALTER TABLE `ocs`.`hardware` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Ну а лучше не полениться и конвертировать всю БД простым скриптом на PHP:
<?php $connection = mysql_connect('localhost', 'debian-sys-maint', '**************') or die ('Could not connect to server'); mysql_select_db('ocs', $connection) or die ('Could not select DB'); mysql_query("alter database `ocs` default character set 'utf8' collate 'utf8_general_ci'", $connection); $result = mysql_query("show tables", $connection); while($row = mysql_fetch_row($result)) { mysql_query("alter table `$row[0]` convert to character set 'utf8' collate 'utf8_general_ci'", $connection); mysql_query("alter table `$row[0]` default character set 'utf8' collate 'utf8_general_ci'", $connection); }
Те, кто заранее позаботился о настройке сервера с этой проблемой не столкнутся, достаточно двух строчек в /etc/my.cnf:
default-character-set = utf8 default-collation = utf8_general_ci
Естественно настраивать надо было до установки OCS
Комментариев нет:
Отправить комментарий