Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 415|回复: 0

centos6.5和centos7.5统一字符集为zh_CN.UTF-8解决系统和MySQL数据库乱码问题

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-5-3 04:21:19 | 显示全部楼层 |阅读模式

    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多实例区分特殊字符集的程序

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-1-23 00:51 , Processed in 0.065810 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表