一、字符集(Character set)

是多个字符(英文字符,汉字字符,或者其他国家语言字符)的集合,字符集种类较多,每个字符集包含的字符个数不同。

特点:

①字符编码方式是用一个或多个字节表示字符集中的一个字符

②每种字符集都有自己特有的编码方式,因此同一个字符,在不同字符集的编码方式下,会产生不同的二进制

常见字符集:

ASCII字符集:基于罗马字母表的一套字符集,它采用1个字节的低7位表示字符,高位始终为0。

LATIN1字符集:相对于ASCII字符集做了扩展,仍然使用一个字节表示字符,但启用了高位,扩展了字符集的表示范围。

GBK字符集:支持中文,字符有一字节编码和两字节编码方式。

UTF8字符集:Unicode字符集的一种,是计算机科学领域里的一项业界标准,支持了所有国家的文字字符,utf8采用1-4个字节表示字符。

1、MySQL与字符集

只要涉及到文字的地方,就会存在字符集和编码方式。MySQL系统变量值:

2、正确使用字符集

数据库服务端的字符集具体要看存储什么字符

以上这些参数如何起作用:

1.库、表、列字符集的由来

①建库时,若未明确指定字符集,则采用character_set_server指定的字符集。

②建表时,若未明确指定字符集,则采用当前库所采用的字符集。

③新增时,修改表字段时,若未明确指定字符集,则采用当前表所采用的字符集。

2.更新、查询涉及到得字符集变量

更新流程字符集转换过程:character_set_client-->character_set_connection-->表字符集。

查询流程字符集转换过程:表字符集-->character_set_result

3.character_set_database

当前默认数据库的字符集,比如执行use xxx后,当前数据库变为xxx,若xxx的字符集为utf8,那么此变量值就变为utf8(供系统设置,无需人工设置)。

3、MySQL客户端与字符集

1.对于输入来说:

客户端使用的字符集必须通过character_set_client、character_set_connection体现出来:

①在客户端对数据进行编码(Linux:utf8、windows:gbk)

②MySQL接到SQL语句后(比如insert),发现有字符,询问客户端通过什么方式对字符编码:客户端通过character_set_client参数告知MySQL客户端的编码方式(所以此参数需要正确反映客户端对应的编码)

③当MySQL发现客户端的client所传输的字符集与自己的connection不一样时,会将client的字符集转换为connection的字符集

④MySQL将转换后的编码存储到MySQL表的列上,在存储的时候再判断编码是否与内部存储字符集(按照优先级判断字符集类型)上的编码一致,如果不一致需要再次转换

2.对于查询来说:

客户端使用的字符集必须通过character_set_results来体现,服务器询问客户端字符集,通过character_set_results将结果转换为与客户端相同的字符集传递给客户端。(character_set_results默认等于character_set_client)

4、MySQL字符编码转换原理:

问:若character_set_client为UTF8,而character_set_database为GBK,则会出现需要进行编码转换的情况,字符集转换的原理是什么?

答:假设gbk字符集的字符串“你好”,需要转为utf8字符集存储,实际就是对于“你好”字符串中的每个汉字去utf8编码表里面查询对应的二进制,然后存储。

图解字符集转换过程:

①MySQL Server收到请求时将请求数据从character_set_client转换为character_set_connection;

②进行内部操作前将请求数据从character_set_connection转换为内部操作字符集

确定步骤:

--使用每个数据字段的CHARACTER SET设定值;

--若上述值不存在,则使用对应数据表的DEFAULT CHARACTER SET设定值;

--若上述值不存在,则使用对应数据库的DEFAULT CHARACTER SET设定值;

--若上述值不存在,则使用character_set_server设定值;

③将操作结果从内部操作字符集转换为character_set_results。

5、字符集常见处理操作

1.查看字符集编码设置

mysql> show variables like '%character%';

2.设置字符集编码

mysql> set names 'utf8';

相当于同时:

set character_set_client = utf8;

set character_set_results = utf8;

set character_set_connection = utf8;

3.修改数据库字符集

mysql> alter database database_name character set xxx;

只修改库的字符集,影响后续创建的表的默认定义;对于已创建的表的字符集不受影响。(一般在数据库实现字符集即可,表和列都默认采用数据库的字符集)

4.修改表的字符集

mysql> alter table table_name character set xxx;

只修改表的字符集,影响后续该表新增列的默认定义,已有列的字符集不受影响。

mysql> alter table table_name convert to character set xxx;

同时修改表字符集和已有列字符集,并将已有数据进行字符集编码转换。

5.修改列字符集

格式:

ALTER TABLE table_name MODIFY

column_name {CHAR | VARCHAR | TEXT} (column_length)

[CHARACTER SET charset_name]

[COLLATE collation_name]

mysql> alter table table_name modify col_name varchar(col_length) character set xxx;

6、字符集的正确实践:

MySQL软件工具本身是没有字符集的,主要是因为工具所在的OS的字符集(Windows:gbk、Linux:utf8),所以字符集的正确实践非常重要:

1.对于insert来说,character_set_client、character_set_connection相同,而且正确反映客户端使用的字符集

2.对于select来说,character_set_results正确反映客户端字符集

3.数据库字符集取决于我们要存储的字符类型

4.字符集转换最多发生一次,这就要求character_set_client、character_set_connection相同

5.所有的字符集转换都发生在数据库端

综述:

1、建立数据库的时候注意字符集(gbk、utf8);

2、连接数据库以后,无论是执行dml还是select,只要涉及到varchar、char列,就需要设置正确的字符集参数。

二、校对规则collation校对

字符集是一套符号和对应的编号

查看数据库支持的所有字符集(charset):

mysql> show character set;

校对规则(collation):

是在字符集内用于字符比较和排序的一套规则,比如有的规则区分大小写,有的则无视。

mysql> create table t1(id int,name varchar(20));   #t1建表没有指定校对规则

mysql> show collation; #查看数据库支持的所有校对规则

mysql> show variables like 'collation_%';#查看当前字符集和校对规则设置

校对规则特征:

①两个不同的字符集不能有相同的校对规则;

②每个字符集有一个默认校对规则;

③存在校对规则命名约定:以其相关的字符集名开始,中间包括一个语言名,并且以_ci(大小写不敏感)、_cs(大小写敏感)或_bin(二元)结束。

注意:

系统使用utf8字符集,若使用utf8_bin校对规则执行SQL查询时区分大小写,使用utf8_general_ci不区分大小写(默认的utf8字符集对应的校对规则是utf8_general_ci)。

示例:

mysql> create table t2(id int,name varchar(20)) character set=gbk collate=gbk_bin;    #t2建表指定校对规则(区分大小写)

mysql 校对规则名_MySQL字符集及校对规则的理解相关推荐

  1. mysql字符集与校对规则设置_MySQL 字符集与校对规则

    1.创建对象时的默认值MySQL 的设置可以分为两类 , 创建对象时的默认值 , 在服务器和客户端通信时的设置 . MySQL 服务器有默认的字符集和校对规则 , 每个数据库也有自己的默认值 . 每个 ...

  2. mysql默认排序规则_mysql 字符集与排序规则的简单了解

    在创建数据库时候,会有字符集和排序规则的选项,太多的选项,就算盲选也有些为难,下面我们一起简单了解下: Navicat Premium 截图 这里先说我的做法,然后简单说下原因 字符集:utf8mb4 ...

  3. mysql查看字符排序规则_Mysql 字符集及排序规则

    原文: Mysql 字符集及排序规则 一.字符集 字符集:就是用来定义字符在数据库中的编码的集合. 常见的字符集:utf8.Unicode.GBK.GB2312(支持中文).ASCCI(不支持中文) ...

  4. mysql字符集的排序规则_MySql字符集与排序规则详解

    前段时间往MySQL中存入emoji表情或生僻字.繁体字时,报错无法添加,研究后发现这是字符集编码的问题,今天就来分析一下各个字符集与排序规则 一.字符集 先说字符,字符是各种文字和符号的总称,包括各 ...

  5. mysql c 中文字符串_MySQL字符集中文乱码终极解决方案和mysql查询中文问题解决方法...

    开源数据库MySQL从来都是中小企业构建web应用的首选,特别是和PHP配合简直就是一 对黄金搭档,深受web开发人员的喜爱.但自从4.1以来MySQL加入了多字符集的支持,很多MySQL使用者发现中 ...

  6. mysql提示符详解_MySQL字符集使用详解

    查看字符集相关变量 mysql> show variables like 'character%'; +--------–+-----------+ | Variable_name | Valu ...

  7. mysql查看主机名_mysql怎么看主机名

    mysql查看主机名的方法: 1.查看主机名 在Ubuntu系统中,快速查看主机名有多种方法: 在终端窗口中,主机名通常位于@符号后:root@lzyws739307453:~#,例如这个的主机名就是 ...

  8. mysql字符集排序规则_Mysql 字符集及排序规则

    一.字符集 字符集:就是用来定义字符在数据库中的编码的集合. 常见的字符集:utf8.Unicode.GBK.GB2312(支持中文).ASCCI(不支持中文) 二.字符集排序规则 作者本人用的是ut ...

  9. mysql gbk排序规则_Mysql 字符集及排序规则

    一.字符集 字符集:就是用来定义字符在数据库中的编码的集合. 常见的字符集:utf8.Unicode.GBK.GB2312(支持中文).ASCCI(不支持中文) 二.字符集排序规则 作者本人用的是ut ...

  10. mysql 字符集 校验规则_MySQL字符集及校验规则

    1.字符集 # Mysql 的字符集有4个级别的默认设置:服务器级,数据库级,表级和字段级,客户端交互时,也可以指定字符集 # 字符集:是一个系统支持的所有抽象字符的集合.字符是各种文字和符号的总称, ...

最新文章

  1. java string 返回匹配正则的字符串的起始位置_Python小课堂正则表达式
  2. TensorFlow学习笔记-实现经典LeNet5模型(转载)
  3. 启动子级时出错_WHO I级脑膜瘤手术或放射外科治疗后的恶性转变
  4. 2018年秋计算机应用基础本科,广东开放大学远程教育专科2018年秋计算机应用基础Word模块测试...
  5. CCF NOI1052 Self-Numbers
  6. 对于根目录磁盘满的了问题
  7. PHP实现伪静态化页面的具体实现方式
  8. 基于Android-JavaEE-DB2实现的旧物交易平台
  9. 蓝屏代码查询器1.1.8
  10. standard fifo和fwft fifo的区别
  11. 【翻译:OpenCV-Python教程】OpenCV里的直方图
  12. skyline 查询 和 验证索引数据结构MR-tree的构建
  13. npm install安装报错:gyp info it worked if it ends with ok的解决方法
  14. GitHub官网访问慢的解决问题
  15. 51制作贪吃蛇小游戏,附带Proteus仿真
  16. Win7无线网络共享教程:解决所有问题
  17. 数据处理方法-算术编码(香农算法、java编码实现)
  18. matlab分数约分,分母
  19. chaos_calmer尝鲜
  20. Windows10 中使用nvidia-smi

热门文章

  1. linux上实现getch()函数
  2. 增强学习 | AlphaGo背后的秘密
  3. Shell编程语言(一)
  4. java策略模式+工厂模式+模板模式
  5. 超详细教程解决Win10计划任务定时重启jar服务
  6. HCIE-Security心得
  7. Servlet+JSP分页
  8. 56相册视频(土豆相册视频 激动相册视频 QQ动感影集等)——下载教程
  9. 13届蓝桥杯c++组日常练习问题记录
  10. Allavsoft 下载 .m3u8 视频