• mysql字符集问题


    • 背景:数据库表信息乱码问题
    • 影响:数据库连接初始化中断
    • 原因:init_connect参数设置问题,参数为不可执行语句。

    1.1 DB字符集参数

    
    #数据库中的字符集设置(以下全部为修改过后的结果)
    mysql> select user();
    +----------------+
    | user()         |
    +----------------+
    | root@localhost |
    +----------------+
    
    #会话级的参数设置,仅对当前回话有效,set names utf8是会话级的参数,当前会话可以修改当前的连接参数,从而覆盖全局参数设置,默认全局参数设置。
    #由于上线是super账户,会话级参数如下,而普通账户的参数都是utf8,所以查看表时导致乱码,而super账户下正常显示。
    #乱码最终的解决方案是:super账户所有会话级参数(除character_set_results设置为latin1)设置为utf8, 查看表的信息,执行alter...modify...  (内部原理详见后文)
    mysql>show variables like "%char%";
    +--------------------------+---------------------------------------+
    | Variable_name            | Value                                 |
    +--------------------------+---------------------------------------+
    | character_set_client     | latin1                                |
    | character_set_connection | latin1                                |
    | character_set_database   | utf8                                  |
    | character_set_filesystem | binary                                |
    | character_set_results    | latin1                                |
    | character_set_server     | utf8                                  |
    | character_set_system     | utf8                                  |
    
    #全局参数设置,对全局用户有效
    mysql>show global variables like "%char%";
    +--------------------------+---------------------------------------+
    | 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                                  |
    
    #连接初始化参数,该参数对super用户无效,仅对普通用户有效,每一个连接首先进行初始化:执行表中的sql. set names utf8等效set 客户端的字符集参数(client,connection,results).
    mysql > show global variables like "%init%";
    +------------------------+----------------+
    | Variable_name          | Value          |
    +------------------------+----------------+
    | init_connect           | set names utf8 |
    
    
    

    1.2 字符集解释与设置

     #character_set_client :客户端来源使用的字符集
     #character_set_connection :连接层使用的字符集
     #character_set_database : 当前数据库使用的字符集(默认latin1)
     #character_set_results : 显示结果使用的字符集
     #character_set_server : DB内部使用的字符集
     #character_set_system : 系统元数据使用的字符集
    
     #init_connetc : 普通用户连接,执行其值(sql)
    
    
    msyql> set names utf8;
    #set names 等效以下:
    msyql> set character_set_client=utf8;
    mysql> set character_set_connection=utf8;
    myqsl> set character_set_results=utf8;
    #init_connect="set names utf8"; 保证普通用户的连接使用的utf8字符集。php中连接数据库前也进行字符集的初始化设置。
    #这3个参数并不能直接在配置文件中设置,一劳永逸的设置方法是在配置文件中:
    [msyql]
    default-character-set = utf8
    [mysqld]
    character-set-server = utf8 (5.6版本也可以是default-character-set =utf8 )
    
    
    

    1.3 DB字符集的转换过程

    1.4 kaogmat转换方案
    上线客户端参数是使用的latin1, 因此查看显示结果(传出)时设置会话参数为 character_set_results=latin1, 其它参数(传入)为utf8, 根据表的信心,重新执行

    alter table table_name modify col_name ......,modify....;
    
  • 相关阅读:
    移动设备横竖屏判断 CSS 、JS
    Jquery监听value的变化
    设置了line-block的div会出现间隙
    移动端点击可点击元素时,出现蓝色默认背景色
    网页顶部进度条-NProcess.js
    ios UITableView
    ios UIScrollView
    ios Xcode 快捷方式
    ios常用方法、基础语法总结
    Mac eclipse Tomcat安装
  • 原文地址:https://www.cnblogs.com/HarveyBing/p/6069690.html
Copyright © 2020-2023  润新知