http://blog.csdn.net/wyzxg/article/details/8779682

author:skate
time:2013/04/09

mysql字符集小结

今天同事阿杰兄发现内部一台mysql测试服务器乱码,以前也记录过关于字符集的,今天再补充下

修改mysql的字符集和默认存储引擎 
http://blog.csdn.net/wyzxg/article/details/7581415

查看库现有的字符集:
mysql> show variables like '%char%';
+--------------------------+------------------------------+
| Variable_name            | Value                        |
+--------------------------+------------------------------+
| character_set_client     | latin1                       | 
| character_set_connection | latin1                       | 
| character_set_database   | latin1                       | 
| character_set_filesystem | binary                       | 
| character_set_results    | latin1                       | 
| character_set_server     | latin1                       | 
| character_set_system     | utf8                         | 
| character_sets_dir       | /mysql/share/mysql/charsets/ |

mysql和字符集有关的变量
character_set_client:客户端请求数据的字符集
character_set_connection:从客户端接收到数据,然后传输的字符集
character_set_database:默认数据库的字符集,无论默认数据库如何改变,都是这个字符集;如果没有默认数据库,那就使用 character_set_server指定的字符集,

这个变量建议由系统自己管理,不要人为定义。
character_set_filesystem:把os上文件名转化成此字符集,即把 character_set_client转换character_set_filesystem, 默认binary是不做任何转换的
character_set_results:结果集的字符集
character_set_server:数据库服务器的默认字符集
character_set_system:这个值总是utf8,不需要设置,是为存储系统元数据的字符集

一个完整的用户请求的字符集转换流程是
   1) mysql Server收到请求时将请求数据从character_set_client转换为character_set_connection
   2) 进行内部操作前将请求数据从character_set_connection转换为内部操作字符集,步骤如下
        A. 使用每个数据字段的CHARACTER SET设定值;
        B. 若上述值不存在,则使用对应数据表的字符集设定值
        C. 若上述值不存在,则使用对应数据库的字符集设定值;
        D. 若上述值不存在,则使用character_set_server设定值。
   3) 最后将操作结果从内部操作字符集转换为character_set_results


   
假如我们要想设定的字符集是utf8的话,步骤如下:

1)修改配置文件
在[client]下添加如下参数,影响系统变量character_set_client和character_set_connection和character_set_results
default-character-set=utf8

在[mysqld]下添加如下参数,影响系统变量character_set_server和character_set_database
default-character-set=utf8

设置完后,启动mysql,我们只需要查看系统变量是否符合我们的要求即可
character_set_client     
character_set_connection 
character_set_database   
character_set_results    
character_set_server

如下三个系统变量不需要关心,不会影响乱码
character_set_filesystem     
character_set_system     
character_sets_dir

修改结果:
mysql> show 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                         | 
| character_sets_dir       | /mysql/share/mysql/charsets/ |

到这就完了吗?我们还没有调整字符序(collation),字符序确定在同一字符集内字符之间的比较规则

mysql> show variables like '%colla%';
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | utf8_general_ci   | 
| collation_database   | utf8_general_ci   | 
| collation_server     | utf8_general_ci   | 
+----------------------+-------------------+

collation_connection:在配置文件里调整[client]default-character-set就可以控制这个参数
collation_server:配置文件里调整[mysqld]collation_server=utf8_general_ci,一定要和[mysqld]default-character-set使用相同字符集
collation_database:在配置文件里调整[mysqld]default-character-set就可以控制这个参数

总的来说要想把字符集调整为utf8的话,在配置文件里需要添加如下几项

[client]
default-character-set=utf8

[mysqld]
default-character-set=utf8
collation_server=utf8_general_ci

命令说明:
mysql> SET NAMES 'utf8';  它相当于下面的三句命令,当如下三个变量不一致,或显示乱码时,可以用这个命令

mysql> SET character_set_client = utf8;  
mysql> SET character_set_results = utf8;   
mysql> SET character_set_connection = utf8;

查看安装的字符序
mysql> show collation; 
查看安装的字符集
mysql> show character set;

参考:
http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html

mysql字符集小结的更多相关文章

  1. 9.Mysql字符集

    9.字符集9.1 字符集概述 字符集就是一套文字符号及其编码.比较规则的集合. ASCII(American Standard Code for Information Interchange)字符集 ...

  2. 如何修改MySQL字符集

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

  3. Mysql字符集设置

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

  4. MySQL字符集

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

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

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

  6. Mysql字符集知识总结

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

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

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

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

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

  9. MySQL 字符集设置

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

随机推荐

  1. jquery+ajax搜索并分页

    定义一个点击事件,获取关键词,传到后台,根据关键词搜索并分页.获取根据关键词分页后的数据,展示到前台.直接替换原来的数据. //接收当前页 $page = Request::instance()-&g ...

  2. Intellij IDEA 中如何查看maven项目中所有jar包的依赖关系图(转载)

    Intellij IDEA 中如何查看maven项目中所有jar包的依赖关系图 2017年04月05日 10:53:13 李学凯 阅读数:104997更多 所属专栏: Intellij Idea   ...

  3. mac 环境搭建

    安装homebrew jdk 也可以官网下载 maven 官网下载tar.gz包 也在homebrew下安装git,java,mysql.

  4. Java_判断文件是否写入完成

    /** * 等待文件(非目录)读写完毕,费时的操作,不要放在主线程 * * @param file 文件 */ private void waitForWirtenCompleted(File fil ...

  5. <Dare To Dream>第五次作业:团队项目需求改进与系统设计

    任务1完成情况: a.分析<家教服务管理系统需求规格说明书>初稿的不足: uml建模不完整,无类图.流程图,仅有的用例图也不规范. b.功能分析的四个象限: c. 团队项目的WBS: d. ...

  6. 什么是jquery

    框架就是一个半成品,不能直接使用,需要加工处理后才可使用

  7. NYOJ37-回文字符串(dp)

    37-回文字符串 内存限制:64MB 时间限制:3000ms 特判: No通过数:88 提交数:177 难度:4 题目描述: 所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如& ...

  8. php 计算坐标点方圆周围多少米的坐标算法

    //地球半径 6371千米 const EARTH_ROUNT = 6371; /** * @param $distance 方圆多少千米 默认500米 */ private function _ge ...

  9. Game Engine Architecture 4

    [Game Engine Architecture 4] 1.a model of multiple semi-independent flows of control simply matches ...

  10. Python设计模式 - UML - 对象图(Object Diagram)

    简介 对象图和类图的基本概念是类似的,可以看作类图在系统某一时刻的镜像,显示了该时刻系统中参与交互的各个对象以及它们之间的关系. 对象图的元素包括对象.链接.包,元素之间的关系和类图相似. 对象图建模 ...