mysql笔记三:字符集和比较规则

关键字:字符集、比较规则、字符集转换

3.1、字符集

3.1.1、字符集概念

字符集就是在一定范围内,字符和计算机中二进制数据(0101)的对应关系。

字符转二进制数据为编码,二进制数据转字符为解码

3.1.2、常用字符集

常用字符集

字符集

范围

1个字符占用字节数

说明

ASCII

128个字符

1字节

 

ISO-8859-1

256个字符

1字节

 

GB2312

6763个汉字+682个符号

1字节或2字节

变长编码方式:在ASCII字符集范围内为1个字节,其余为2个字节

BGK

对GB2312进行扩充

1字节或2字节

 

unicode

地球上所有字符

1-4字节

变长编码,兼容ASCII

Unicode字符集

unicode字符集

字符集

编码方案

1个字符占用字节数

unicode

utf8

utf8mb3

1~3字节

utf8mb4

1~4字节

utf16

2或4字节

utf32

4字节

3.1.3、查看mysql支持的字符集

       SHOW CHARACTER SET

3.2、比较规则

3.2.1、查看mysql支持的比较规则

SHOW COLLATION like "UTF8\_%";

3.2.2、比较规则的命名规律

字符集名_语言_后缀

比如:utf8_polish_ci:utf8字符集,波兰语,不区分大小写

后缀的含义:

后缀的含义

后缀

英文释义

含义

_ai

accent insensitive

不区分重音

_as

accent sensitive

区分重音

_ci

case insensitive

不区分大小写

_cs

case sensitive

区分大小写

_bin

binary

以二进制比较

以二进制比较:比较字符串时,把字符串编码为二进制数据后直接比较二进制数的大小。

同一个字符集下会有多个不同的比较规则。utf8默认的比较规则是utf8_general_ci

3.3.3、比较规则的应用

1)对数据库里的数据进行排序;

2)B+树节点中的数据会根据这个比较规则规则进行排序。

3.3、mysql中指定字符集和比较规则

3.3.1、mysql字符集和比较规则级别

mysql字符集和比较规则有四个级别

服务器级别、数据库级别、表级别、列级别

3.3.2、服务器级别

mysql中提供了2个系统变量来表示服务器级别的字符集和比较规则

SHOW VARIABLES LIKE 'character_set_server';

SHOW VARIABLES LIKE 'collation_server';

3.3.3、数据库级别

建库指定:create database 数据库名[[DEFAULT] CHARACTER SET 字符集名称] [[DEFAULT] collate 比较规则名称]

修改:alter database 数据库名[[DEFAULT] CHARACTER SET 字符集名称] [[DEFAULT] collate 比较规则名称]

查看:SHOW VARIABLES like 'character_set_database';

      SHOW VARIABLES like 'collation_database';

3.3.4、表级别

create table 表名(

       字段

) [character set 字符集名称] [collation 比较规则名称]

3.3.5、列级别

create table 表名(

       列名 列类型 [character set 字符集名称] [collation 比较规则名称]

);

alter table 表名 modify 列名 列类型 [character set 字符集名称] [collation 比较规则名称]

3.4、字符集转换

3.4.1、什么是字符集的转换

一个程序将接受过来的二进制数据使用A字符集进行解码得到字符串,再用B字符集进行编码得到二进制数据,这个过程称为字符集的转换。

3.4.2、mysql中字符集的转换

mysql从接受客户端请求,到从表中查询出数据,再到将结果返回给客户端会进行多次字符集的转换,牵扯到3个系统变量,分别是

character_set_client、character_set_connection、character_set_results

注:1)mysql服务器默认认为客户端使用的是character_set_client对应的字符集进行编码的;

       2)mysql服务器会对结果使用character_set_results对应的字符集进行编码;

       3)设置character_set_client、character_set_connection、character_set_results为同一个编码:

              SET NAMES 字符集名

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值