linux的服务器需要做的操作
centos6.5下:
修改默认字符集为 zh_CN.UTF-8,如果没有中文语言包可能需要安装中文语言包支持
[root@meinv01 ~]# yum groupinstall chinese-support [root@meinv01 ~]# cat /etc/sysconfig/i18n #<==修改此配置文件为如下 LANG="zh_CN.UTF-8" SYSFONT="latarcyrheb-sun16" [root@meinv01 ~]# source /etc/sysconfig/i18n [root@meinv05 ~]# date #<==验证 2018年 12月 21日 星期五 19:22:43 CST
centos7.5系统:
与centos6.5不太一样,需要做以下操作调整字符集为 zh_CN.UTF-8
[root@meinv05 ~]# locale -a|grep zh_CN* #<==查看当前系统是否安装中文语言包 zh_CN zh_CN.gb18030 zh_CN.gb2312 zh_CN.gbk zh_CN.utf8
如果没有安装中文语言包,使用以下2条命令中其中一条安装中文语言包即可
[root@meinv05 ~]# yum install -y kde-l10n-Chinese [root@meinv05 ~]# yum groupinstall -y "fonts" [root@meinv05 ~]# locale -a|grep zh_CN* #<=再次查看确保系统已安装下列中文语言包 zh_CN zh_CN.gb18030 zh_CN.gb2312 zh_CN.gbk zh_CN.utf8 [root@meinv05 ~]# echo $LANG #<==查看当前字符集 en_US.UTF-8 [root@meinv05 ~]# vi /etc/locale.conf #<=编辑配置文件修改默认的英文字符集为以下 LANG="zh_CN.UTF-8" [root@meinv05 ~]# cat /etc/locale.conf LANG="zh_CN.UTF-8" [root@meinv05 ~]# source /etc/locale.conf [root@meinv05 ~]# locale LANG=zh_CN.UTF-8 LC_CTYPE="zh_CN.UTF-8" LC_NUMERIC="zh_CN.UTF-8" LC_TIME="zh_CN.UTF-8" LC_COLLATE="zh_CN.UTF-8" LC_MONETARY="zh_CN.UTF-8" LC_MESSAGES="zh_CN.UTF-8" LC_PAPER="zh_CN.UTF-8" LC_NAME="zh_CN.UTF-8" LC_ADDRESS="zh_CN.UTF-8" LC_TELEPHONE="zh_CN.UTF-8" LC_MEASUREMENT="zh_CN.UTF-8" LC_IDENTIFICATION="zh_CN.UTF-8" LC_ALL= [root@meinv05 ~]# date #<==验证 2018年 12月 21日 星期五 19:22:43 CST
MySQL数据库需要做的操作
1.编译安装MySQL时,指定MySQL数据库默认的字符集为zh_CN.UTF-8,使用到的参数如下:
-DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii
2.修改MySQL数据库配置文件 /etc/my.cnf 中相关参数
[root@meinv05 ~]# cat /etc/my.cnf #<==注意此修改不能使用echo追加的方法,因为此配置文件是对应模块的,echo追加对于修改不生效 [client] #<==在[client]字段里加入default-character-set=utf8 default-character-set=utf8 #<==如果使用mysqlbinlog命令查看log-bin日志出错,可把此行注释掉或者删除不加此行 [mysqld] #<==在[mysqld]字段里加入character-set-server=utf8(MySQL5.5版本以上使用) port = 3306 #<==在[mysqld]字段里加入default-character-set=utf8(MySQL5.1版本以下使用) socket = /var/lib/mysql/mysql.sock character-set-server=utf8 [mysql] #<==在[mysql]字段里加入default-character-set=utf8 no-auto-rehash default-character-set=utf8
注意:修改完成后,重启mysql服务就生效(如果仅仅是修改MySQL客户端就无需重启服务直接生效),[mysqld]字段与[mysql]字段是有区别的,一起更改。
进入MySQL命令行界面下,验证字符集是否全部是 zh_CN.UTF-8
mysql> show variables like 'character_set%'; +--------------------------+-------------------------------------------+ | 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 | /application/mysql-5.5.32/share/charsets/ | +--------------------------+-------------------------------------------+ 8 rows in set (0.00 sec)
小结
- 字符串显示乱码的罪魁祸首是字符集不统一,最大程度上规避乱码问题要注意以下几点
- Linux服务器字符集,Linux服务器的链接终端,MySQL客户端/服务端(编译安装,二进制解压,yum,创建库和表等),开发的程序所有的字符集都需要统一
- 生产环境业务上线前统一好字符集,尽量避免字符集不统一造成的乱码
- MySQL数据库统一字符集,如有特殊需求,使用单独MySQL数据库或者使用MySQL多实例区分特殊字符集的程序