При использовании MySQL версии 4.1 и выше возникают трудности с поддержкой русского языка. Чтобы их разрешить, сделайте следующее:
1. Выполните команду
ALTER DATABASE имя_базы CHARSET cp1251;
2. Посмотрите, что вернёт команда
SHOW VARIABLES LIKE 'character_set_%';
Если character_set_server и character_set_client равно cp1251, то больше никаких действий не нужно. Иначе следует сделать следующее:
Задаем кодировку в настройках mysql сервера (как правило файл с настройками - /etc/my.cnf или /etc/mysql/my.cnf)
[mysqld] #Кодировка, в которой содержаться данные в таблицах default-character-set=cp1251 [client] #Кодировка по умолчанию для подключающихся клиентов default-character-set=cp1251
подробнее о кодировке в mysql можно прочитать тут, о файле my.cnf - здесь.
Этот вариант не подходит, если нет возможности изменить конфигурацию сервера MySQL или сервер используется совместно с другими программами, которым такие изменения помешают.
From Splint: Мне помог такой вариант секции
[mysqld] default-character-set=cp1251 skip-character-set-client-handshake
From Kompik: От себя добавлю что таблицы должны по команде
SHOW CREATE TABLE SetupList
Выдавать DEFAULT CHARSET=cp1251
После этого в VerliHub'e все будет нормально отображаться, без этого у меня неверно отображалось имя Security бота.
From InGan: От себя добавлю. мне только помог этот вариант с изменением кодировки работы мускула по умолчанию в FreeBSD у провайдера FirstVDS и не забудьте рестартовать свой сервер, почемуто рестарт мускула не помог.
В случае, когда нет возможности изменить настройку сервера, можно воспользоваться альтернативным решением - выполнить команду
SET NAMES cp1251;
после запуска хаба. Это можно сделать с помощью простого lua-скрипта:
-- Charset workaround script -- by Shurik function Main() VH:SQLQuery("SET names cp1251"); end
Скрипт надо будет разместить в каталоге $VERLIHUB_CFG/scripts. Разумеется, необходим плагин LuaScript. Возможно, что некоторые русскосодержащие параметры, которые зачитываются хабом до загрузки скрипта, при этом не смогут быть нормально отображены, например, имена ботов или фильтры ForbiddenWords.
Если не лень поправить исходники, чтобы не трогать mysql, то в файле cmysql.cpp после строчки
mysql_options(mDBHandle,MYSQL_OPT_COMPRESS,0);
вставляем
mysql_options(mDBHandle,MYSQL_INIT_COMMAND,"set names cp1251");
После этого следует сделать make и make install
Примечание: замечено, что в Gentoo это не помогает. Более правильный путь - в следующем варианте.
Идея является продолжением варианта 3. Берём отсюда (или отсюда для более старых версий) этот патч, а в dbconfig прописываем
db_charset = cp1251
http://verlihub.aliki.ru/index.php?title=MySQL_и_русский_язык
[1]
As a good security measusre we shouldn't be running our hub with root account. Thus we cannot use 411 port.
A good way arround for this is to forward through iptables the 411 port to 1411 or 4111 or whichever you use.
IPTABLES -A PREROUTING -t nat -i eth0 -p tcp --dport 411 -j REDIRECT --to-port 1411
[2]
iptables -F INPUT # accept all packets that belong to known connections iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # throw away all nonsense packets iptables -A INPUT -p tcp -m tcp -m state --state INVALID,UNTRACKED -j DROP # repeat these two lines for every hub port you use iptables -A INPUT -p tcp -m tcp --dport 411 -m limit --limit 500/sec -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 411 -j DROP #don't forget things like www, mail and ssh iptables -A INPUT -p tcp -m tcp --dport 80 -m limit --limit 100/sec -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 80 -j DROP iptables -A INPUT -p tcp -m tcp --dport 25 -m limit --limit 3/sec -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 25 -j DROP # don't limit ssh too strictly iptables -A INPUT -p tcp -m tcp --dport 22 -m limit --limit 1000/sec -j ACCEPT # rest of the script does not accept tcp iptables -A INPUT -p tcp -m tcp -j DROP #if you run a nameserver iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT #if you want icmp iptables -A INPUT -p icmp -m icmp --icmp-type any -m state --state INVALID -j DROP iptables -A INPUT -p icmp -j ACCEPT #if you use DHCP iptables -A INPUT -p udp -m udp --sport 67 --dport 68 -j ACCEPT # enable this if you are sure there are no bugs in the script. #iptables -P INPUT DROP