centos6.5和centos7.5統一字符集為zh_CN.UTF-8解決系統和MySQL數據庫亂碼問題


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)

小結

  1. 字符串顯示亂碼的罪魁禍首是字符集不統一,最大程度上規避亂碼問題要注意以下幾點
  2. Linux服務器字符集,Linux服務器的鏈接終端,MySQL客戶端/服務端(編譯安裝,二進制解壓,yum,創建庫和表等),開發的程序所有的字符集都需要統一
  3. 生產環境業務上線前統一好字符集,盡量避免字符集不統一造成的亂碼
  4. MySQL數據庫統一字符集,如有特殊需求,使用單獨MySQL數據庫或者使用MySQL多實例區分特殊字符集的程序

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM