MySQL的字符集

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

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

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

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

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

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

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

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

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

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

2、常见的字符集

ASCII字符集

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

GB2312 BIG5 GBK 16位二进制

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

扩展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

将E5BF8D转换为二进制111001011011111110001101

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

1110xxxx 10xxxxxx 10xxxxxx

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

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

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

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

(1)Unicode编码存储英文。

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

(2)Unicode编码存储中文

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

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

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

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

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

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

使用chcp [nnn]

显示活动控制台代码页数量,或更改该控制台的活动控制台代码页。如果在没有参数的情况下使用,则 chcp 显示活动控制台代码页的数量。 
语法 
chcp [nnn] 
参数 
指定代码页。下表列出了所有支持的代码页及其国家(地区)或者语言: 
代码页       国家(地区)或语言 
437          美国 
932          日文(Shift-JIS)
936          中国 - 简体中文(GB2312)
949          韩文
950          繁体中文(Big5)

说明windows默认的字符集为 GBK

3、MySQL中的字符集

3.1、查看MySQL支持的所有字符集

show character set;

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

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

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

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

3.3、查看当前使用的字符集

show variables like ‘character_set_%‘;

character_set_system 系统级别的字符集

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

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

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

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

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

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

character_set_client

character_set_connection

character_set_results

更改MySQL默认字符集

create database schooldb

set names latin1

set names utf8

字符集兼容性

时间: 2024-10-06 15:48:41

MySQL的字符集的相关文章

Mysql事务&字符集

Mysql事务 Innodb存储引擎的中的事务完全服务ACID: 原子性.2.一致性.3.隔离性.4.持久性 理解上和oracle类似. 事务隔离级别 1.Read uncommitted 读未提交: 2.Read committed 读已提交: 3.Repeatable read 可重复读,类似oracle利用undo的闪回查询: 4.Serializable 串行读,很少用. 隔离级别的修改: 通过set命令: 通过修改配置文件,启动数据库的默认隔离级别-mysqld Mysql字符集 My

修改mysql默认字符集

(1) 最简单的修改方法,就是修改mysql的my.ini文件中的字符集键值,ubuntu下mysql的配置文件是在 /etc/mysql/my.cnf下, 我是将这个文件复制到我的 /home/username文件夹下,重命名为 .my.cnf,这样即使配置出错,也不会影响数据库的正常运行 如: [client] default-character-set = utf8 [mysqld] character_set_server = utf8 修改完后,重启mysql的服务, sudo res

了解MySQL的字符集

在数据库中,字符乱码属于常见.多发问题.鉴于本人水平顶多只能归于不入流之类,写这篇文章时内心诚惶诚恐,实在担心误导大家.内容仅供参考,若有错误,请各位及时指出,我也好学习提高! MySQL的字符集有4种级别的设置,分别是:服务器级.数据库级.表级.字段级. 一.服务器级字符集 (1).可以在my.cnf中设置 [mysqld] default-character-set=gbk (5.1) character-set-server=gbk (5.5) (2).可以在启动选项中设置 mysqld

修改mysql默认字符集的方法

mysql默认字符集能否进行修改呢?答案是肯定的,下面就将教您两种修改mysql默认字符集的方法,希望对您学习mysql默认字符集方面能有所启迪. (1) 最简单的修改方法,就是修改mysql的my.ini文件中的字符集键值, 如 default-character-set = utf8  character_set_server = utf8 修改完后,重启mysql的服务,service mysql restart 使用 mysql> SHOW VARIABLES LIKE 'charact

MySQL utf8mb4 字符集:支持 emoji 表情符号

㈠ 序言 为了应对无线互联网的机遇和挑战.避免 emoji 表情符号带来的问题. 涉及无线相关的 MySQL 数据库建议都提前采用 utf8mb4 字符集 这必须要作为移动互联网行业的一个技术选型的要点 ㈡ 限制 需要 >= MySQL 5.5.3版本.从库也必须是5.5的了.低版本不支持这个字符集.复制报错 ㈢ 简要步骤 以下是一个未升级到 5.5.3 的配置步骤: ① 备份数据库 ② 升级 MySQL Server 到 v5.5.3+ ③ 修改 database.table和column字符

mysql默认字符集修改

mysql默认字符集能否进行修改呢?答案是肯定的,下面就将教您两种修改mysql默认字符集的方法,希望对您学习mysql默认字符集方面能有所启迪. (1) 最简单的修改方法,就是修改mysql的my.ini文件中的字符集键值, 如 default-character-set = utf8 character_set_server = utf8 修改完后,重启mysql的服务,service mysql restart 使用 mysql> SHOW VARIABLES LIKE 'characte

MySQL之字符集-校对规则

一.字符集(Character set) 是多个字符(英文字符,汉字字符,或者其他国家语言字符)的集合,字符集种类较多,每个字符集包含的字符个数不同. 特点: ①字符编码方式是用一个或多个字节表示字符集中的一个字符 ②每种字符集都有自己特有的编码方式,因此同一个字符,在不同字符集的编码方式下,会产生不同的二进制 常见字符集: ASCII字符集:基于罗马字母表的一套字符集,它采用1个字节的低7位表示字符,高位始终为0. LATIN1字符集:相对于ASCII字符集做了扩展,仍然使用一个字节表示字符,

在my.ini文件中配置mysql统一字符集

测试的mysql版本为:5.7.14 查看mysql字符集命令: show variables like 'character_set_%'; 以下是在my.ini文件中配置mysql统一字符集参数: [mysqld] character-set-server=utf8 ;设置character_set_server和character_set_database默认值为utf8 [client] default-character-set=utf8 ;设置character_set_client

修改MySQL默认字符集编码

好记心不如烂笔头,很多东西当时没记下来,过了就忘了,下次用到时又得浪费好多时间才能解决.今天又遇到修改MySQL默认字符集编码的问题,折腾了半天解决了,赶快记录下来,以后就不用每次折腾了. 查看MySQL字符集的命令是“show variables like '%char%';”. 以MySQL5.6为例,默认的字符集为: 在工作中需要将字符集全部修改为utf8. 以下是修改的方法: 1.打开安装目录,默认在“C:\Program Files\MySQL\MySQL Server 5.6”, 2

mysql之字符集与校对集

一.字符集 1.mysql的字符集设置非常灵活 可以设置服务器默认字符集: 数据库默认字符集: 表默认字符集: 列字符集: 如果某一级别没有指定字符集,则继承上一级. 查看所有字符集语句:show character set; 2.以表声明为utf-8为例,最终存储在表中的数据为utf-8 ①我们要告诉服务器,我给你发送的数据是什么编码?character_set_client ②告诉字符集转换器,转换成什么编码?character_set_connection ③查询的结果用什么编码?char