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. ubuntu 外接显示器

    xrandr --help xrandr   # 列出显示器 sudo xrandr --output eDP-1 --off   # 关闭eDP-1显示器 sudo xrandr --output ...

  2. css 之过渡效果

    之前写css的效果,都是使用js 来完成的,但是写js比较耗费时间,有时候逻辑不对,还出不来效果,所以也比较烦:所以一些简单的效果,就使用css 来完成会比较好一些,不必耗费太多的精力: 但是写css ...

  3. dev: `webpack-dev-server --inline --progress --config build/webpack.dev.conf.js` vue启动报错解决

    这是因为webpack-dev-server版本和vue版本不一样,需要将webpack-dev-server卸载了,安装对应版本 查看vue版本是 vue -V 注意:V是大写 卸载npm unin ...

  4. 【转】WPS word 文档中的插入对象 为什么打不开

    点击桌面左下角开始按钮--所有程序,找到wps office文件夹--wps office工具--配置工具--高级--兼容设置,否选兼容第三方软件.

  5. netcore 下加密遇到的问题

    KeyedHashAlgorithm algorithm = KeyedHashAlgorithm.Create(algorithmName.ToString().ToUpper(CultureInf ...

  6. mysql主从脚本

    #!/bin/bash #auto make install mysql AB Replication #by author ale #-- :: MYSQL_SOFT="mariadb m ...

  7. angular.min.js:118 Error: [ng:areq] http://errors.angularjs.org/1.5.8/ng/areq?

    1,错误如图所示 简单说下错误原因是:没有js没有注册进去. 解决方法: 1.看下index.html有没有引入你的js文件. 2.看下app.js有没有注册js,比如我这次就是这步没做好,合并代码时 ...

  8. Centos 7 docker 启动容器 iptables 报 No chain/target/match by that name

    我也遇到这个问题,原因时启动docker服务时没有启动iptables服务导致的(有些docker需要再iptables开放有些端口)解决方法1.启动iptables服务 CentOS 7 以下版本 ...

  9. ES6学习笔记(数组)

    1.扩展运算符:, 2, 3]) // 1 2 3 console.log(1, ...[2, 3, 4], 5) // 1 2 3 4 5 用于函数调用 function add(x, y) { r ...

  10. MMU二级页表

    https://blog.csdn.net/forDreamYue/article/details/78887035