mysql ascii charset_MySQL的字符集

1、关于字符集的几个相关概念

(1)字符Character,人类语言中最小的表意(表达意思的)符号

(2)字符集(合)CharSet 一组字符就可以定义一个字符集合,通常包括一个国家、民族使用的字符

ASCII字符集合、扩展ASCII字符集合、拉丁语系、GB2312 BIG5 Unicode字符集合

(3)字符编码 给字符集合中的字符指定一个数字来标识

(4)字符集 字符集合+编码=字符集

(5)字符序 Collation 定义了字符集中字符的排序规则(是否区分 大小写),有了字符序,就有了排序标准。一个字符集可以 有多个字符序,有的字符序可能区分大小写,有的字符序可能不区分大小写。

字符集合 可以有多种编码方式 多个字符集

一个字符集 可以有多个排序规则 多个字符序

字符序 Collation中的以_ci结尾代表大小写不敏感,应该是case insensitive,以_cs结尾表示大小写敏感,以_bin按编码值进行比较

dce6e083a0217f43d980dea48bc72932.png

2、常见的字符集

ASCII字符集

扩展ASCII字符集 latin1 8位二进制,包括ASCII字符集中的全部字符

GB2312 BIG5 GBK 16位二进制

Unicode字符集 全球语言 16位二进制

99bf1e29e4a5d3bd444da598a80ab0f2.png

扩展ASCII字符集,例如:latin1、latin2

Unicode字符集合 Unicode编码 一个字符两个字节

Unicode字符集合 UTF-8编码 一个英文字符一个字节,一个中文字符使用3个字节

UTF-8是一种变长字节编码方式。对于某一字符的UTF-8编码,如果只有一个字节则其最高二进制为0;如果是多字节,其第一个字节从高位开始,连续的二进制为1的个数决定了其编码的倍数,其余字节均以10开头。UTF-8最多可用到6个字节。

如下:

1字节 0xxxxxxx

2字节 110xxxxx 10xxxxxx

3字节 1110xxxx 10xxxxxx 10xxxxxx

4字节 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

5字节 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

6字节 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

编码的本质就是用一个数值来表示一个字符

如何获取一个汉字在UTF-8编码中码值呢?

例如一个“忍”字,它对应的UTF-8编码是E5BF8D

321ce2d248fed1debd11766f2e410603.png

将E5BF8D转换为二进制111001011011111110001101

d74c654a64b5d76f89cdc8d99ebfc22f.gif

我们知识中文在UTF-8中占用3个字节,因此它的模板是

1110xxxx 10xxxxxx 10xxxxxx

84447caefa44fc30fa69f1402e05b88d.png

因此,“忍”字对应的UTF-8码值为0101 1111 1100 1101,这16个二进制,恰好是两个字节

再将这16个二进制数转换为16进制数,即5FCD。

10604813572bb6942d4e118a3f7ef0c2.gif

再次查看编码查询工具,发现BigEndUni的值正好是“5FCD”

ca832c6eec305d0b647d1a117128e86b.png

同样的字符,使用的编码方式不同,占用的字节数也不相同

(1)Unicode编码存储英文。

打开记事本ABCD占用10个字节,“ABCD”一共4个字符,每个字符采用Unicode编码占用2个字节,共8个字节,再加上结束字符(EOF)2个字节,共10个字节。

dcaddd2fa8998358e3412c75dbdb7889.png

(2)Unicode编码存储中文

记事本中输入“ABCD你好”,一共6个字符,共占12字节,再加上结束字符(EOF)2个字节,共14字节。

1a633d387096ef0bcd12273a716fc952.png

(3)UTF-8编码存储英文

记事本中输入“ABCD”,共4个字符,每个英文字符占1个字节,共4个字节,再加上结束字符(EOF)3个字节,共7个字节。

3972d9a9f3844e96c737d9ceacebaee1.png

(4)UTF-8编码存储中文

记事本中输入“ABCD你好”,4个英文字符,每个英文字符占1个字节,共4个字节,2个中文字符,每个中文字符占3个字节,共6个字节,再加上结束符(EOF)3个字节,共13个字节。

a49aef413cdfd3cfd6ec8137e1e7cf69.png

在控制台查看可接受的字符集

使用chcp [nnn]

34d19b766ebad73a1c2e5eedcc703f89.gif显示活动控制台代码页数量,或更改该控制台的活动控制台代码页。如果在没有参数的情况下使用,则 chcp 显示活动控制台代码页的数量。 

语法

chcp [nnn]

参数

指定代码页。下表列出了所有支持的代码页及其国家(地区)或者语言:

代码页       国家(地区)或语言

437          美国

932          日文(Shift-JIS)

936          中国 - 简体中文(GB2312)

949          韩文

950          繁体中文(Big5)

说明windows默认的字符集为 GBK

3、MySQL中的字符集

3.1、查看MySQL支持的所有字符集show character set;

ce380767937c9815926deb46add43c79.png

3.2、MySQL中字符集的使用策略:数据库级别、表级别、列级别

创建数据库的时候,如果不指定数据库的字符集,就会使用服务器的默认字符集

创建表的时候,如果不指定表的字符集,就会使用数据库字符集

创建列的时候,如果不指定字符集,默认使用表的字符集

3.3、查看当前使用的字符集show variables like 'character_set_%';

e6b1146d6b49979507568491623a8d9f.png

character_set_system 系统级别的字符集

character_set_server 服务器级别使用的字符集

character_set_database 数据库级别的字符集(每个数据库可能有自己的字符集)

character_set_system,是server用来存储identifier(例如:数据库的名字、表的名字、列的名字)的字符集,总是utf8。

c438056531e3323aa45dfe751ab019ab.png

character_set_server,是server的默认字符编码。【猜想:character_set_system是用来存储identifier(标识符,例如:数据库名、表名、列名可以使用中文),而character_set_server是用来指示content(存储内容)使用的字符编码】

eca1085e93ec48dce12102dca79a7727.png

chracter_set_database,如果当前没有选中数据库,则使用character_set_server的值;如果选定了某个数据库,则会根据该数据库相应的存储内容的字符集。

881b658990d5454a87a25a2c85cee607.png

后面的内容,不知道该如何整理了,可能自己还不太清楚吧。。。

character_set_client

character_set_connection

character_set_results

更改MySQL默认字符集

create database schooldb

set names latin1

set names utf8

字符集兼容性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值