MySQL的字符集问题主要是两个概念,一个是Character Sets,一个是Collations,前者是字符内容及编码,后者是对前者进行比较操作的一些规则。这两个参数集可以在数据库实例、单个数据库、表、列等四个级别指定;
zabbix没有数据存储的功能,所以需要借助第三方数据库完成数据存储,比较流行的是使用mysql,而关于她的字符集就成了一个小问题,我们来是这去解决一下;
一:zabbix监控中常碰到的字符集问题解决
1. 图形中显示中文乱码
2. 历史记录处出现乱码
二:更改mysql字符集的操作
1. 查看当前的默认字符集
2. 安装之前设定字符集
3. 安装后没有存储数据时更改
4. 有了一定的数据存储后更改
一:zabbix监控中常碰到的字符集问题
1.图形中显示中文乱码
yum 安装的zabbix 字体并不是在/usr/share/zabbix/fonts下,而在/usr/share/zabbix/fonts/dejavu下,具体配置可以通过查看配置文件:/usr/share/zabbix/include/defines.inc.php;虽然这个目录下有个 DejaVuSans.ttf 但是不管用,
我们需要搞一个喜欢的中文字体放到这里来,比如从windows上的 C:\windows\fonts\目录下拷贝文件 simfang.ttf 到 /usr/share/zabbix/fonts/dejavu 目录下,然后修改名字
mv DejaVuSans.ttf DejaVuSans.ttf.bak
mv simfang.ttf DejaVuSans.ttf
重启:/etc/init.d/zabbix-server restart
2.历史记录处出现问号乱码
这是因为zabbix数据库所使用的字符集不是中文的utf8,解决方法如下:
备份zabbix数据库
mysqldump -uroot -p 123456 zabbix > zabbix.sql
修改备份文件
sed -i 's/latin1/utf8/g' zabbix.sql
删除zabbix数据库
mysql> drop database zabbix;
退出mysql数据库,设置默认字符集
vim /etc/my.cnf
[mysqld]
log-bin
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
default-character-set = utf8 #添加该项
启动mysql并恢复zabbix数据库
mysql -uroot -p123456 zabbix < zabbix.sql
二:更改mysql字符集的操作
1. 查看当前的默认字符集
mysql> show create database zabbix;
mysql> show variables like 'character%';
2. 安装之前设定,适用于源码包安装
我们可以在在编译MySQL的时候可以通过 DEFAULT_CHARSET=utf8
DEFAULT_COLLATION=utf8_general_ci这两个参数;
编译的时候指定--with-charset=utf8 --with-collation=utf8_general_ci)来指定默认的字符集为
utf8,这也是最一劳永逸的办法
3. 安装后没有数据时
/etc/my.cnf
修改mysql的my.ini或my.cnf文件中的字符集键值
在[mysqld]下添加
default-character-set=utf8 (mysql 5.5 版本添加character-set-server=utf8)
在[client]下添加
default-character-set=utf8
重启:service mysql restart
查看:mysql> SHOW VARIABLES LIKE 'character%'
但是这种更改对客户端的连接是没有作用的,客户端这时候一般需要指定utf8方式连接才能避免乱码。也就是传说中的setnames命令。
服务器上执行:
set names utf8 这就可以,只不过每次开机都得执行
其实set names utf8命令对应的是服务器端以下几个命令
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = xutf8;
因为这三个参数是不能写在配置文件my.cnf里的。只能通过set命令来动态修改。但是我们可以用init_connect,这个命令意思是每个用户连接上来的时候都会触发执行,可以在[mysqld]部分增加以下一行
[mysqld]
init_connect = 'SET NAMES utf8'
关于这个设置,有的文档在这个基础上另加了几条命令,在那三个set上又增加了几条,你的实在还不行的话加上试试吧