1. 程式人生 > >centos6.5和centos7.5統一字符集為zh_CN.UTF-8解決系統和MySQL資料庫亂碼問題

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

linux的伺服器需要做的操作

centos6.5下:

修改預設字符集為 zh_CN.UTF-8,如果沒有中文語言包可能需要安裝中文語言包支援

[[email protected] ~]# yum groupinstall chinese-support

[[email protected] ~]# cat /etc/sysconfig/i18n    #<==修改此配置檔案為如下
LANG="zh_CN.UTF-8"
SYSFONT="latarcyrheb-sun16"

[[email protected] ~]# source /etc/sysconfig/i18n 

[[email protected] ~]# date                            #<==驗證
2018年 12月 21日 星期五 19:22:43 CST

 

centos7.5系統:

與centos6.5不太一樣,需要做以下操作調整字符集為 zh_CN.UTF-8

[[email protected] ~]# locale -a|grep zh_CN*        #<==檢視當前系統是否安裝中文語言包
zh_CN
zh_CN.gb18030
zh_CN.gb2312
zh_CN.gbk
zh_CN.utf8

如果沒有安裝中文語言包,使用以下2條命令中其中一條安裝中文語言包即可

[[email protected] ~]# yum install -y kde-l10n-Chinese       

[[email protected] ~]# yum groupinstall -y "fonts"

[[email protected] ~]# locale -a|grep zh_CN*        #<=再次檢視確保系統已安裝下列中文語言包
zh_CN
zh_CN.gb18030
zh_CN.gb2312
zh_CN.gbk
zh_CN.utf8

[[email protected] ~]# echo $LANG       #<==檢視當前字符集

en_US.UTF-8

[[email protected] ~]# vi /etc/locale.conf       #<=編輯配置檔案修改預設的英文字符集為以下

LANG="zh_CN.UTF-8"

[[email protected] ~]# cat /etc/locale.conf
LANG="zh_CN.UTF-8"

[[email protected] ~]# source /etc/locale.conf
[[email protected] ~]# 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=

[[email protected] ~]# 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 中相關引數

[[email protected] ~]# cat /etc/my.cnf          #<==注意此修改不能使用echo追加的方法,因為此配置檔案是對應模組的,echo追加對於修改不生效

[client]                   #<==在[client]欄位里加入default-character-set=utf8
default-character-set=utf8    

[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多例項區分特殊字符集的程式