字符集是指一种从二进制编码到某类字符符号的映射,校对是一组用于某个字符集的排序规则。每一类编码字符都有其对应的字符集和校对规则

MySQL 如何使用字符集

每种字符集都可能有多种校对规则,并且都有一个默认的校对规则。每个校对规则都是针对某个特定的字符集的,和其他的字符集都没有关系。校对规则和字符集总是一起使用的,我们也将这样的组合统称为一个字符集。

MySQL的设置可以分为两类:创建对象时的默认值、在服务器和客户端通信时的设置。

创建对象时的默认值

MySQL服务器有默认的字符集和校对规则,每个数据库、数据表也有自己的默认值。这是一个逐层继承的默认设置,最终最靠底层的默认设置将影响我们创建的对象。这些默认值,从上而下地告诉MySQL应该使用什么字符集来存储某个列。

在这个阶梯的每一层,你都可以指定一个特定的字符集或者让服务器使用它的默认值:

在创建数据库的时候,将根据服务器上的 character_set_server 设置来设定该数据库的默认字符集

创建表的时候,将根据数据库的字符集设置指定这个表的字符集设置

创建列的时候,将根据表的设置指定列的字符集设置

需要注意的是: 真正存放数据的是列,所以更高“阶梯”的设置只是指定默认值。一个表的默认字符集设置无法影响存储在这个表中某个列的值。只有当创建列而没有列指定字符集的时候,如果没有指定字符集,表的默认字符集才有作用。

服务器和客户端通信时的设置

当服务器和客户端通信的时候,他们可能使用不同的字符集。这时,服务器端将进行必要的翻译转换工作,如图所示:

根据需要,可以使用 SET NAMES 或者 SET CHARACTER SET 语句来改变上面的设置。不过在服务器上使用这个命令只会改变服务器端的设置。客户端程序和客户端的API也需要使用正确的字符集才能避免在通信时出现问题。

选择字符集和校对规则

在一个数据库中使用多个不同的字符集是一件很让人头疼的事情,字符集之间不兼容问题会很难缠。有时候一切看起来很正常,但是当某个特殊字符出现的时候,所有类型的操作可能都无法进行。

正确的方法是,最好先为服务器(或者数据库) 选择一个合理的字符集。然后根据不同的实际情况,让某些列选择合适的字符集。

下面展示了在创建数据库、表、列的时候如何显式地指定字符集和校对规则:

CREATE DATABASE d CHARSET latin1;

CREATE TABLE d.t(

col1 CHAR(1),

col2 CHAR(1) CHARSET utf8,

col3 CHAR(1) COLLATE latin1_bin

)DEFAULT CHARSET=cp1251;

这个表最后的字符集和校对规则如下:

Field

Type

Collation

col1

char(1)

cp1251_general_ci

col2

char(!)

utf8_general_ci

col3

char(!)

latin1_bin

字符集和校对规则如何影响查询

某些字符集和校对规则可能会需要更多的CPU操作,可能会消耗更多的内存和存储空间,甚至还会影响索引的正常操作。

只有在排序查询要求的字符集和服务器数据的字符集相同的时候,才能使用索引进行排序。索引根据数据列的校对规则进行排序。如果希望使用别的校对规则进行排序,那么MySQL就需要使用文件排序。

mysql 引擎 校对,MySQL 字符集和校对相关推荐

  1. 高性能的MySQL(7)字符集和校对

    字符集是指一种从二进制编码到某类字符符号的映射,可以参考如何使用一个字节来表示英文. 校对是指一组用于某个字符集的排序规则. 每一类编码字符都有其对应的字符集和校对规则. 一.MySQL如何使用字符集 ...

  2. mysql连接校对_mysql字符集和校对规则(Mysql校对集)

    字符集的概念大家都清楚,校对规则很多人不了解,一般数据库开发中也用不到这个概念,mysql在这方便貌似很先进,大概介绍一下 简要说明 字符集和校对规则 字符集是一套符号和编码.校对规则是在字符集内用于 ...

  3. mysql回退事务使用_MySQL事务处理及字符集和校对顺序

    一.事务处理 事务处理:是一种机制,管理必须成批执行的MySQL操作,以保证数据库不包含不完整的操作结果.用来维护数据库的完整性. 利用事务处理,可以保证一组操作不会中途停止,或作为整体执行或完全不执 ...

  4. mysql事务顺序重排_MySQL事务处理及字符集和校对顺序

    一.事务处理 事务处理:是一种机制,管理必须成批执行的MySQL操作,以保证数据库不包含不完整的操作结果.用来维护数据库的完整性. 利用事务处理,可以保证一组操作不会中途停止,或作为整体执行或完全不执 ...

  5. 13、设置默认字符集和校对规则

    MySQL 服务器可以支持多种字符集,在同一台服务器.同一个数据库甚至同一个表的不同字段中,都可以使用不同的字符集.Oracle 等其它数据库管理系统都只能使用相同的字符集,相比之下,MySQL 明显 ...

  6. mysql干货——数据库字符集和校对规则详解

    2019独角兽企业重金招聘Python工程师标准>>> 一.什么是字符集 字符是多个文字和符号的总称,包括各个国家的文字.标点符号.图形符号.数字等.字符集多个字符的集合. 字符集合 ...

  7. mysql 字符集和校对规则

    为什么80%的码农都做不了架构师?>>>    1,常规字符集及校对 假设我们有一个字母表使用了四个字母:'A'.'B'.'a'.'b'.我们为每个字母赋予一个数值:'A'=0,'B ...

  8. 11、MySQL字符集和校对规则详解

    在讲解字符集和校对规则之前,我们先来简单了解一下字符.字符集和字符编码. 字符(Character)是计算机中字母.数字.符号的统称,一个字符可以是一个中文汉字.一个英文字母.一个阿拉伯数字.一个标点 ...

  9. mysql 查看校对集_mysql 查看字符集和校对规则

    MySQL 服务器可以支持多种字符集,在同一台服务器.同一个数据库.甚至同一个表的不同字段都可以指定使用不同的字符集,相比Oracle 等其他数据库管理系统,在同一个 数据库只能使用相同的字符集,My ...

最新文章

  1. CentOS 7 + MySql 中文乱码解决方案
  2. Autodesk MotionBuilder 2020中文版
  3. 在Cloud9上搭建Yii开发环境
  4. oracle10g ty_str_split,Oracle split(分隔字符串函数)
  5. oracle 中大于等于_针对oracle安装参数调整方法
  6. 【Coursera】Getting Started with Python:Week One - Reading: Welcome to The Class
  7. Linux应用编程之共享内存实例
  8. 计算机的安全设置在哪儿,电脑防火墙在哪里设置
  9. 职高学计算机走单招是,职高学生不用愁了,还有机会上本科,走“单招”或是最佳途径!...
  10. Vue使用Element-ui按需引入大坑
  11. thriftserver的SparkSQL命令行操作Hive表
  12. mysqld.exe
  13. MEncoder的基础用法—6.2. 选择输入文件或设备
  14. ubuntu上解决evolution邮箱附件为dat格式
  15. PHP数据结构之实现链式二叉树与遍历
  16. 用友t+畅捷通使用方法_【财务人员必看干货】用友财务软件使用方法和快捷键大全!...
  17. 【HDU6704】K-th occurrence(后缀数组+二分+st+主席树)
  18. 【2017满分】尔雅 刘忠良 绿色康复答案题库
  19. matlab 最速下降,matlab最速下降法
  20. 人工智能离我们很遥远?专家:美图软件其实也是

热门文章

  1. Machine Learning from Start to Finish with Scikit-Learn
  2. python Gunicorn
  3. QMake Automatic Dependencies
  4. 判断程序是否已经运行
  5. Java反射机制:表单数据自动封装到JavaBean中【IT】
  6. Linux 小知识翻译 - 「邮件服务器」
  7. vi and vim 用法
  8. 基于PyTorch搭建CNN实现视频动作分类任务代码详解
  9. 598. 范围求和 II
  10. leetcode 1600. 皇位继承顺序(dfs)