標籤: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