mysql中字符集的作用_mysql 字 符 集 问 题 之 zabbix

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

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

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

1. 图形中显示中文乱码

2. 历史记录处出现乱码

二:更改mysql字符集的操作

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

2. 安装之前设定字符集

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

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

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

1.图形中显示中文乱码

65f0bfd4715143450da123c6df30cd7b.png

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

7258d5e8d1fbc4cedb391cb4231efb0a.png

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

68c60aeb0fe8aa86ea0e2d088772d608.png

mysql> show variables like ‘character%‘;

a4d2b26af6b256b671710a28df906881.png

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

3231d1b3d5309b1eaf333ae31b773338.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值