mysql 字 符 集 問 題 之 zabbix

來源:互聯網
上載者:User

標籤:mysql 字元集


MySQL的字元集問題主要是兩個概念,一個是Character Sets,一個是Collations,前者是字元內容及編碼,後者是對前者進行比較操作的一些規則。這兩個參數集可以在資料庫執行個體、單個資料庫、表、列等四個層級指定;


zabbix沒有資料存放區的功能,所以需要藉助第三方資料庫完成資料存放區,比較流行的是使用mysql,而關於她的字元集就成了一個小問題,我們來是這去解決一下;


一:zabbix監控中常碰到的字元集問題解決

1. 圖形中顯示中文亂碼

2. 記錄處出現亂碼


二:更改mysql字元集的操作

1. 查看當前的預設字元集

2. 安裝之前設定字元集

3. 安裝後沒有儲存資料時更改

4. 有了一定的資料存放區後更改




一:zabbix監控中常碰到的字元集問題


1.圖形中顯示中文亂碼

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/74/6B/wKioL1Yc6S6zRpmbAAJOkMnPcAM756.jpg" title="5.PNG" width="660" height="120" border="0" hspace="0" vspace="0" style="width:660px;height:120px;" alt="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.記錄處出現問號亂碼


650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/74/6F/wKiom1Yc6gSS3u3GAACxANnT0Ns153.jpg" title="555.PNG" alt="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;

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/74/6F/wKiom1Yc6iTy2_LwAADPBEl0now942.jpg" style="float:none;" title="5555.PNG" alt="wKiom1Yc6iTy2_LwAADPBEl0now942.jpg" />


mysql> show variables like ‘character%‘;

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/74/6F/wKiom1Yc6iTyP6ERAAEl1eZI3CQ615.jpg" style="float:none;" title="555555.PNG" alt="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上又增加了幾條,你的實在還不行的話加上試試吧

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/74/6C/wKioL1Yc63mC_YgPAAEYkv6X2F0901.jpg" title="55555555.PNG" alt="wKioL1Yc63mC_YgPAAEYkv6X2F0901.jpg" />










mysql 字 符 集 問 題 之 zabbix

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.