mysql 字 符 集 问 题 之 zabbix

MySQL的字符集问题主要是两个概念,一个是Character Sets,一个是Collations,前者是字符内容及编码,后者是对前者进行比较操作的一些规则。这两个参数集可以在数据库实例、单个数据库、表、列等四个级别指定;

zabbix没有数据存储的功能,所以需要借助第三方数据库完成数据存储,比较流行的是使用mysql,而关于她的字符集就成了一个小问题,我们来是这去解决一下;

一:zabbix监控中常碰到的字符集问题解决

1. 图形中显示中文乱码

2. 历史记录处出现乱码

二:更改mysql字符集的操作

1. 查看当前的默认字符集

2. 安装之前设定字符集

3. 安装后没有存储数据时更改

4. 有了一定的数据存储后更改


一:zabbix监控中常碰到的字符集问题

1.图形中显示中文乱码

wKioL1Yc6S6zRpmbAAJOkMnPcAM756.jpg

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.历史记录处出现问号乱码

wKiom1Yc6gSS3u3GAACxANnT0Ns153.jpg

这是因为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;

wKiom1Yc6iTy2_LwAADPBEl0now942.jpg

mysql> show variables like 'character%';

wKiom1Yc6iTyP6ERAAEl1eZI3CQ615.jpg

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上又增加了几条,你的实在还不行的话加上试试吧

wKioL1Yc63mC_YgPAAEYkv6X2F0901.jpg



你可能感兴趣的:(mysql,字符集)