• CentOS 7 + MySql 中文乱码解决方案


    原文:https://blog.csdn.net/qq_32953079/article/details/54629245,亲测有效,故记录之。

    一、登录MySQL查看用SHOW VARIABLES LIKE ‘character%’;下字符集,显示如下:

    +--------------------------+----------------------------+
    | Variable_name | Value |
    +--------------------------+----------------------------+
    | character_set_client | utf8 |
    | character_set_connection | utf8 |
    | character_set_database | latin1 |
    | character_set_filesystem | binary |
    | character_set_results | utf8 |
    | character_set_server | latin1 |
    | character_set_system | utf8 |
    | character_sets_dir | /usr/share/mysql/charsets/ |
    +--------------------------+----------------------------+

    character_set_database和character_set_server的默认字符集还是latin1。

    二、最简单的完美修改方法,修改mysql的my.cnf文件中的字符集键值(注意配置的字段细节):

    1、在[client]字段里加入default-character-set=utf8,如下:

    [client]
    default-character-set=utf8

    2、在[mysqld]字段里加入character-set-server=utf8,如下:

    [mysqld]
    port = 3306
    socket = /var/lib/mysql/mysql.sock
    character-set-server=utf8

    3、在[mysql]字段里加入default-character-set=utf8,如下:

    [mysql]
    no-auto-rehash
    default-character-set=utf8

    修改完成后,service mysql restart重启mysql服务就生效。注意:[mysqld]字段与[mysql]字段是有区别的。这点在网上没人反馈过。

    使用SHOW VARIABLES LIKE ‘character%’;查看,发现数据库编码全已改成utf8。

    +--------------------------+----------------------------+
    | 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/share/mysql/charsets/ |
    +--------------------------+----------------------------+

    4、如果上面的都修改了还乱码,那剩下问题就一定在connection连接层上。解决方法是在发送查询前执行一下下面这句(直接写在SQL文件的最前面):
    SET NAMES 'utf8'

    它相当于下面的三句指令:


    SET character_set_client = utf8;
    SET character_set_results = utf8;
    SET character_set_connection = utf8;

    网上很多其他方法不能彻底解决这个问题,这个可以完美解决!

    --------------------------------------------------------------------------------------------------------分割线----------------------------------------------------------------------------------------------------------------------------

    附:mysql开启远程连接和开放3306端口

    CentOS下开启mysql远程连接,远程管理数据库
    当服务器没有运行php、没装phpmyadmin的时候,远程管理mysql就显得有必要了。因为在CentOS下设置的,所以标题加上了CentOS,以下的命令在debian等系统下应该也OK。

    mysql -u root -p mysql # 第1个mysql是执行命令,第2个mysql是系统数据名称
    在mysql控制台执行:

    grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
    # root是用户名,%代表任意主机,'123456'指定的登录密码(这个和本地的root密码可以设置不同的,互不影响)
    flush privileges; # 重载系统权限
    exit;
    允许3306端口
    iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT


    # 查看规则是否生效
    iptables -L -n # 或者: service iptables status

    # 此时生产环境是不安全的,远程管理之后应该关闭端口,删除之前添加的规则
    iptables -D INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
    PS,上面iptables添加/删除规则都是临时的,如果需要重启后也生效,需要保存修改:
    service iptables save # 或者: /etc/init.d/iptables save
    另外,
    vi /etc/sysconfig/iptables # 加上下面这行规则也是可以的
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT

  • 相关阅读:
    第09组 Beta冲刺(2/5)
    第09组 Beta冲刺(3/5)
    第09组 Beta冲刺(4/5)
    第09组 Beta冲刺(5/5)
    第09组 Beta冲刺(1/5)
    SDN课程阅读作业(2)
    C语言I作业07
    C语言I博客作业05
    C语言I博客作业04
    C语言I博客作业03
  • 原文地址:https://www.cnblogs.com/20143605--pcx/p/9176382.html
Copyright © 2020-2023  润新知