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....;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值