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. 2018-2019-2 网络对抗技术 20165304 Exp6 信息搜集与漏洞扫描

    2018-2019-2 网络对抗技术 20165304 Exp6 信息搜集与漏洞扫描 原理与实践说明 1.实践原理 信息搜集:渗透测试中首先要做的重要事项之一,搜集关于目标机器的一切信息 间接收集 D ...

  2. mac安装linux双系统的吐槽

    [First day] 尝试安装mac - linux 双系统 首先,尝试的是ubuntu16.06版本,要把双系统安装至电脑硬盘512G SSD中, *** 分盘 1.1 打开实用工具中的磁盘管理工 ...

  3. 使用memcached遇到的一些问题

    1 .多台服务器时间不统一,引发缓存存取异常. 问题描述: 同一台memcache缓存服务器,比如memcache.server=192.168.88.51:11211   提供缓存服务: 项目部署到 ...

  4. 【译】在Transformer中加入相对位置信息

    目录 引言 动机 解决方案 概览 注释 实现 高效实现 结果 结论 参考文献 本文翻译自How Self-Attention with Relative Position Representation ...

  5. FileStream说明

    FileStream(String, FileMode)    FileStream(String path, FileMode) 文件打开模式:(FileMode)包括6个枚举 Append:追加  ...

  6. Android studio下载慢解决,使用阿里云解决(转)

    转自:https://blog.csdn.net/kangweijian/article/details/79120849?%3E 使用开源中国的maven库 阿里云的(速度飞快):http://ma ...

  7. 安装oracle [INS-32025] 所选安装与指定 Oracle 主目录中已安装的软件冲突” 的问题

    删除C:\Program Files (x86)\Oracle\Inventory\下的Oracle文件夹即可解决问题

  8. [ts] Property 'aaa' does not exist on type 'Window' 解决办法

    第一种: (window as any).aaa 第二种: declare global { interface Window { aaa: any; } } window.aaa = window. ...

  9. P61 实践作业

    网络攻防实验环境搭建 根据链接下载的实验工具包,将其解压 打开VM虚拟机,点击图中红色框,扫描虚拟机 选择文件所在位置 点击下一步,完成.即可 在VM虚拟机设置中把网络适配器修改为桥接模式.如下图 在 ...

  10. ESP8266 软件实现 Delta-sigma(ΔΣ)调制器 并通过I2S接口输出编码流

    一.关于Delta-sigma(ΔΣ)调制器 Delta-sigma(ΔΣ)调制器是Delta-sigma转换器的核心部件.如下所示为一个简单的一阶Delta-sigma调制器,该调制器产生一个1bi ...