【数据库の相关概念】概念补充

字符集

概念

ASCII:7位bit表示一个字符,共有128个字符

GBK:专门用于解决中文编码,中英文都使用双字节,访问GBK网页需要下载中文包支持

UTF-8:用以解决国际上字符的一种多字节编码,英文单字节,中文双字节

操作

show charset; 查看字符集

show variables like "char%";status; 查看客户端服务器端等的字符集

set name 字符集; 等效于 set character_set_client = 字符集; set character_set_results = 字符集; set character_set_connection = 字符集; 更改数据库中相应对象的字符集

数据库中字符集转换

【数据库の相关概念】概念补充

character_set_client:我们要告诉服务器,我给你发送的数据是什么编码?character_set_connection:告诉字符集转换器,转换成什么编码?
character_set_results:查询的结果用什么编码?

【数据库の相关概念】概念补充

乱码:同样的二进制串对于不同的字符集由于编码方式不同所以表达的含义也不同,如果原封不动返回数据会出现乱码,不过可通过修改查询字符集,避免乱码,即不会丢失数据。

【数据库の相关概念】概念补充

数据丢失:存储数据集比插入时的的字符集大(字符集所能表示数据范围的多少),如果插入数据集合无法正确地表示存储数据集,则无法正确地还原存储数据集的数据

解决方案

  • 首先要明确你的客户端时候何种编码格式,这是最重要的(IE6一般用utf8,命令行一般是gbk,一般程序是gb2312)
  • 确保你的数据库使用utf8格式,很简单,所有编码通吃
  • 一定要保证connection字符集大于等于client字符集(字符集所能表示数据范围的多少),不然就会信息丢失,比如: latin1 < gb2312 < gbk < utf8
  • 以上三步做正确的话,那么所有中文都被正确地转换成utf8格式存储进了数据库,为了适应不同的浏览器,不同的客户端,你可以修改character_set_results来以不同的编码显示中文字体,由于utf8是大方向,因此web应用是我还是倾向于使用utf8格式显示中文的。

校对集

概念

在某个字符集的情况下,字符集的排列顺序应该是什么,称之为校对集,常见后缀有:

_bin 是基于二进制编码的直接比较;

_ci 对大小写不敏感;

_cs 对大小写敏感;

校对集必须在库和表没有数据之前声明比较好,如果有了数据之后,再进行校对集的修改,则修改无效。

操作

show collation; 查看字符集的校对规则

例:select * from 表名字 order by 字段名 [asc升序(默认),desc降序]; 按照顺序查看表中指定字段

存储引擎

定义

数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。

分类(常见)

MyISAM: 拥有较高的插入,查询速度,但不支持事务

InnoDB :5.5版本后Mysql的默认数据库,事务型数据库的首选引擎,支持ACID事务,支持行级锁定

Memory :所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在Mysql重新启动时丢失

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lVpghfR5-1605533742499)(C:\Users\就这样吧\AppData\Roaming\Typora\typora-user-images\image-20201114232044710.png)]

操作

show engines; 查询数据库的存储引擎