略懂 MySQL字符集
本文虽说旨在明白、但若略懂亦可、毕竟诸葛孔明如是
只有基于字符的值才有所谓字符集的概念
某些字符集可能需要更多CPU、消费更多的内存和磁盘空间、甚至影响索引使用
这还不包括令人蛋碎的乱码、
可见、我们还是有必要花点时间略懂下MySQL字符集
先直观认识各阶梯下显示使用字符集:
# 囊括三个层级:DB、Table、Column mysql> create database d charset utf8;
Query OK, 1 row affected (0.04 sec) mysql> create table d.t
-> (str varchar(10) charset latin1)
-> default charset=utf8;
Query OK, 0 rows affected (0.05 sec)
那如果没有显示指定?MySQL是如何设置?路分两条:
① 创建对象时的默认设置
这是个逐层继承的默认设置:
Server → DB → Table → Column
高层为底层设置默认值、底层可遵可弃、
没有指定字符集、谓之可遵
显示指定字符集、谓之可弃
② 服务器和客户端通信时的设置
当客户端提交一条SQL到MySQL时、MySQL Server总是假定客户端字符集是character_set_client
其后、Server把character_set_client转为character_set_connection进行SQL处理、
在返回结果集给客户端时、Server又将character_set_connection转为character_set_result、然后返回
以上涉及的三个字符集、我们可以通过set names 一次搞定
字符集之间的相互转换是需要额外的系统开销的、
如何知道?
explain extended + show warnings 即可
那该如何尽量避免这种隐式转换?
这里介绍一种被称为"极简原则"的方法、如下:
先为服务器(或数据库)选择合适的字符集、然后依据业务、让某些列选择合适的字符集
在MySQL字符集中隐含了些意外惊喜、主要有三:
① 有趣的character_set_database
当character_set_database和character_set_server不同时、库的默认字符集由后者决定
你不能直接修改csd、改变css就改变了csd、因为csd和库默认字符集相同、
改变库默认字符集、csd就随之改变、而css决定库的默认字符集
所以、当连接到mysql实例、又没有指定库时、默认字符集与css相同
② load data infile
进行此操作时、建议最佳实践如下:
use 库;
set names 字符集;
开始加载数据;
这就使用统一字符集、避免混搭的"字符集style"
③ select into outfile
该行为没有进行任何转码操作!
有人说、不管37二十一、全用utf8、整个世界都清净了
但这不仅消耗更多磁盘空间、也带来一定性能牺牲
为什么?因为utf8是多字节字符集、比如一个汉字是三个字节
这会带来两方面的问题:
① 浪费空间、如char(10)可能会开辟30字节空间、即使不需要
② 索引长度限制、mysql总是假定一个字符三个字节、导致最长索引长度变成1/3
行文至此、大意已明、后续想到、再续前缘
By WaterBin
2013-07-18
Good LUck
略懂 MySQL字符集的更多相关文章
- 再见乱码:5分钟读懂MySQL字符集设置
一.内容概述 在MySQL的使用过程中,了解字符集.字符序的概念,以及不同设置对数据存储.比较的影响非常重要.不少同学在日常工作中遇到的"乱码"问题,很有可能就是因为对字符集与字符 ...
- MySQL字符集编码
MySQL字符集编码总结 之前内部博客上凯哥分享了一篇关于mysql字符集的文章,之前我对mysql字符集一块基本没有深究过,看到凯哥文章后有些地方有点疑惑,遂自己去看了mysql的官方文档,并參考了 ...
- MySQL字符集与排序规则总结
字符集与排序规则概念 在数据库当中都有字符集和排序规则的概念, 很多开发人员甚至包括有些DBA都会将这个混淆,当然这个情况也有一些情有可原的原因.一来两者本来就是相辅相成,相互依赖关联: 另外一方 ...
- 从一个慢查询到MySQL字符集编码
从一个慢查询到MySQL字符集编码 目录 从一个慢查询到MySQL字符集编码 1. 问题起源 2. MySQL字符集和字符集排序规则 2.1 字符集相关概念 2.2 MySQL中的字符集和字符集排序规 ...
- 如何修改MySQL字符集
首先,MySQL的字符集问题主要是两个概念,一个是Character Sets,一个是Collations,前者是字符内容及编码,后者是对前者进行比较操作的一些规则.这两个参数集可以在数据库实例.单个 ...
- Mysql字符集设置
转 基本概念 • 字符(Character)是指人类语言中最小的表义符号.例如’A'.’B'等:• 给定一系列字符,对每个字符赋予一个数值,用数值来代表对应的字符,这一数值就是字符的编码(Encodi ...
- MySQL字符集
字符集的选择 1.如果数据库只需要支持中文,数据量很大,性能要求也很高,应该选择双字节定长编码的中文字符集(如GBK).因为相对于UTF-8而言,GBK"较小",每个汉字只占2个字 ...
- mysql5.5字符集设置的一点变化(对于中文乱码问题,需要设置mysql字符集)
工作中因为字符集问题没少头疼,还犯过一次错误,还好拯救及时,没有发生重大事故,唉,弄清楚点还是非常有必要的: 例如我的工作环境为CTR+redhat5+mysql5.5 在导入sql语句的时候必须要注 ...
- Mysql字符集知识总结
字符集&字符编码方式 字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,这里的字符可以是英文字符,汉字字符,或者其他国家语言字符. 常见字符集 ...
随机推荐
- 啊上班的二号i将诶
http://www.huihui.cn/share/8112372 http://www.huihui.cn/share/8112363 http://www.huihui.cn/share/811 ...
- 2013杭州网络赛C题HDU 4640(模拟)
The Donkey of Gui Zhou Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- Spring MVC 3.x 版本使用 @ResponseBody 返回乱码
由于万恶的Spring MVC 默认返回编码 是 ISO-8859-1, 使用如下配置, 可以将编码专为UTF-8, <bean class="org.springframework. ...
- [转] 8张图学习javascript
学习的道路就是要不断的总结归纳,好记性不如烂笔头,so,下面将po出8张javascript相关的思维导图. 思维导图小tips:思维导图又叫心智图,是表达发射性思维的有效的图形思维工具 ,它简单却又 ...
- DDL\DML\DCL\DQL
[DML] DML = Data Manipulation Language,数据操纵语言,命令使用户能够查询数据库以及操作已有数据库中的数据的计算机语言.具体是指是UPDATE更新.INSERT插入 ...
- 2014 HDU多校弟五场J题 【矩阵乘积】
题意很简单,就是两个大矩阵相乘,然后求乘积. 用 Strassen算法 的话,当N的规模达到100左右就会StackOverFlow了 况且输入的数据范围可达到800,如果变量还不用全局变量的话连内存 ...
- Spring IOC三种注入方式(接口注入、setter注入、构造器注入)(摘抄)
IOC ,全称 (Inverse Of Control) ,中文意思为:控制反转, Spring 框架的核心基于控制反转原理. 什么是控制反转?控制反转是一种将组件依赖关系的创建和管理置于程序外部的技 ...
- Fiddler 教程(转)
阅读目录 Fiddler的基本介绍 Fiddler的工作原理 同类的其它工具 Fiddler如何捕获Firefox的会话 Fiddler如何捕获HTTPS会话 Fiddler的基本界面 Fiddler ...
- 设计模式 ( 二十 ) 访问者模式Visitor(对象行为型)
设计模式 ( 二十 ) 访问者模式Visitor(对象行为型) 1.概述 在软件开发过程中,对于系统中的某些对象,它们存储在同一个集合collection中,且具有不同的类型,而且对于该集合中的对象, ...
- 九度OnlineJudge之1023:EXCEL排序
题目描述: Excel可以对一组纪录按任意指定列排序.现请你编写程序实现类似功能. 对每个测试用例,首先输出1行“Case i:”,其中 i 是测试用例的编号(从1开始).随后在 N ...