zoukankan      html  css  js  c++  java
  • 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....;
    
  • 相关阅读:
    【Leetcode】【Easy】Remove Duplicates from Sorted List
    【Leetcode】【Easy】Pascal's Triangle II
    【Leetcode】【Easy】Pascal's Triangle
    【Leetcode】【Easy】Binary Tree Level Order Traversal II
    【Leetcode】【Easy】Binary Tree Level Order Traversal
    【Leetcode】【Easy】Maximum Depth of Binary Tree
    【Leetcode】【Easy】Minimum Depth of Binary Tree
    【Leetcode】【Easy】Balanced Binary Tree
    【Leetcode】【Easy】Symmetric Tree
    如何使用Action.Invoke()触发一个Storyboard
  • 原文地址:https://www.cnblogs.com/HarveyBing/p/6069690.html
Copyright © 2011-2022 走看看