• 背景:数据库表信息乱码问题
  • 影响:数据库连接初始化中断
  • 原因: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....;

mysql字符集问题的更多相关文章

  1. 如何修改MySQL字符集

    首先,MySQL的字符集问题主要是两个概念,一个是Character Sets,一个是Collations,前者是字符内容及编码,后者是对前者进行比较操作的一些规则.这两个参数集可以在数据库实例.单个 ...

  2. Mysql字符集设置

    转 基本概念 • 字符(Character)是指人类语言中最小的表义符号.例如’A'.’B'等:• 给定一系列字符,对每个字符赋予一个数值,用数值来代表对应的字符,这一数值就是字符的编码(Encodi ...

  3. MySQL字符集

    字符集的选择 1.如果数据库只需要支持中文,数据量很大,性能要求也很高,应该选择双字节定长编码的中文字符集(如GBK).因为相对于UTF-8而言,GBK"较小",每个汉字只占2个字 ...

  4. mysql5.5字符集设置的一点变化(对于中文乱码问题,需要设置mysql字符集)

    工作中因为字符集问题没少头疼,还犯过一次错误,还好拯救及时,没有发生重大事故,唉,弄清楚点还是非常有必要的: 例如我的工作环境为CTR+redhat5+mysql5.5 在导入sql语句的时候必须要注 ...

  5. Mysql字符集知识总结

    字符集&字符编码方式 字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,这里的字符可以是英文字符,汉字字符,或者其他国家语言字符. 常见字符集 ...

  6. MySQL字符集的修改和查看

    1.关于MySQL字符集 MySQL的字符集支持(Character Set Support)有两个方面: 字符集(Character set)和排序方式(Collation). MySQL对于字符集 ...

  7. MySQL字符集转换引发插入乱码问题

    根据http://www.cnblogs.com/cchust/p/4601536.html进行验证测试 问题背景 在mysql上面执行一条普通的insert语句,结果报错: Incorrect st ...

  8. MySQL 字符集设置

    /*************************************************************************** * MySQL 字符集设置 * 说明: * 数 ...

  9. [MySQL] 字符集的选择

    1. Mysql支持的字符集 MySQL服务器可以支持多种字符集,不同的字段都可以使用不同的字符集. 查看所有可用字符集: show character set; select * from info ...

  10. Mysql字符集设置 2 图

    基本概念 • 字符(Character)是指人类语言中最小的表义符号.例如'A'.'B'等: • 给定一系列字符,对每个字符赋予一个数值,用数值来代表对应的字符,这一数值就是字符的编码(Encodin ...

随机推荐

  1. google 技巧

    inurl: 用于搜索网页上包含的URL. 这个语法对寻找网页上的搜索,帮助之类的很有用. intext: 只搜索网页部分中包含的文字(也就是忽略了标题,URL等的文字). site: 可以限制你搜索 ...

  2. SQL中游标的使用--遍历数据逐行更新或删除:相当于for循环

    --------------------------------------例子1 单纯的游标-------------------------------- create TABLE Table1 ...

  3. Opencv2.2版本以上CvvImage类的使用

    Opencv 2.2以上的版本不再包含CvvImage类,可有时我们在MFC中显示图片仍然需要CvvImage类,特别进行图像的拷贝.显示等操作的时候. 早期版本的CvvImage.h添加进工程也是可 ...

  4. Opencv+MFC获取摄像头数据,显示在Picture控件

    分为两步:OpenCV获取摄像头数据+图像在Picture上显示 第一步:OpenCV获取摄像头数据 参考:http://www.cnblogs.com/epirus/archive/2012/06/ ...

  5. Angular JS Scope(作用域)

    Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带. Scope 是一个对象,有可用的方法和属性. Scope 可应用在视图和控制器上. 当你在 Ang ...

  6. Objective-C Runtime 运行时之一:类与对象(转载)

    Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一 ...

  7. swift label不同颜色、不同字体

    let string = "点击注册按钮,即表示您已同意隐私条款和服务协议" let ranStr = "同意" let attrstring:NSMutabl ...

  8. spring security:ajax请求的session超时处理

    当前端在用ajax请求时,如果没有设置session超时时间并且做跳转到登录界面的处理,那么只是靠后台是很难完成超时的一系列动作的:但是如果后台 没有封装一个ajax请求公共类,那么在ajax请求上下 ...

  9. mysql中文显示问号

    mysql插入中文后显示为?,查到http://blog.csdn.net/chenxingzhen001/article/details/7567812中方法,即 在my.ini配置文件中的[myd ...

  10. 理解iaas paas saas三种云服务区别

    其实搞懂这个问题也不难,我们可以把云计算理解成一栋大楼,而这栋楼又可以分为顶楼.中间.低层三大块.那么我们就可以把Iass(基础设施).Pass(平台).Sass(软件)理解成这栋楼的三部分.基础设施 ...