码迷,mamicode.com
首页 > 数据库 > 详细

mysql 字 符 集 问 题 之 zabbix

时间:2015-10-14 01:51:30      阅读:390      评论:0      收藏:0      [点我收藏+]

标签:mysql 字符集


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

技术分享










mysql 字 符 集 问 题 之 zabbix

标签:mysql 字符集

原文地址:http://beibing.blog.51cto.com/10693373/1702634

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!