烹茶细论

cacti迁移导致的中文乱码解决

cacti需要迁移到新的服务器,迁移之后发现中文字体乱码
可能原因:

  • 新系统缺少中文环境支持
  • 旧数据库数据导出乱码
  • 新数据库导入乱码
  • 数据库取出数据展示乱码

解决过程

一、系统添加中文字体支持
首先你需要一个中文字体,将它放进 /usr/share/fonts目录中,我从旧机器上面scp一份字体库过去。
然后执行下面的命令刷新字体缓存,
fc-cache -f -v
最后修改 RRDTool Default Font 的路径为/usr/share/fonts/msyh.ttf
修改完后刷新,乱码依旧,但这一步骤也是必要的。

二、数据库编码问题

比较两个数据库编码

旧数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> show variables like "%char%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

新数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> show variables like "%char%";
+--------------------------+----------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/charsets/ |
+--------------------------+----------------------------------+

尝试过建立新的库时采用latin1的编码,命令行select时发现中文不乱码,但是展示出来依然乱码,修改上面的character值可以解决,但是可能倒是其他库乱码。

所以决定改原有的库编码格式为UTF8

1、导出数据库乱码
mysqldump -u root -p cacti >cacti.sql
查看cacti.sql发现中文全部乱码,所以得指定编码
mysqldump -u root –default-character-set=latin1 -p cacti >cacti.sql
乱码解决

2、导入数据库乱码

  • 转换cacti.sql编码

    windows下记事本打开,另存为,选择utf8*   替换cacti.sql中create table中指定编码talin1为utf8
    
    linux下使用命令:set -i ‘s/latin1/utf8/g’ cacti.sql   会提示有68处修改*   source 导入前使用set names utf8
    

select查询一下数据库,中文显示正常。
网页刷新一下,乱码问题解决。