php学习整理之mysql(二)存储引擎、字符集、校对集

来源:互联网 发布:逃脱者2mac中文版 编辑:程序博客网 时间:2024/06/10 15:28

转载请注明出处,谢谢。

    • 非关系型数据库简介
    • NoSQL数据库的四大分类
      • 键值Key-Value存储数据库
      • 列存储数据库
      • 文档型数据库
      • 图形Graph数据库
    • 存储引擎
      • Innodb
      • myisam
    • 字符集与校对集
      • 字符集
      • 校对集
      • 字符集有4个级别
        • 服务器级
        • 数据库级
        • 数据表级
        • 字段级
      • 注意
      • 使用ci方式创建数据表
      • 创建bin校对集的
    • 客户端乱码

非关系型数据库简介

Nosql=not only sql,不仅仅是sql。
关系型数据库使用的是SQL。
非关系型数据库不需要SQL。
如:mogondb、redis。
特点:存取快捷、结构简单。
非关系型数据库的数据是键值结构,key/value。
**注意:**Memcache的数据结构就是键值结构,它的数据存放于内存中;Memcache是一个缓存系统,没有存储数据到磁盘文件的功能,所以不是非关系型数据库。

NoSQL数据库的四大分类

键值(Key-Value)存储数据库

列存储数据库。

文档型数据库

图形(Graph)数据库

点此详细了解。

存储引擎

MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。

    mysql是存在于多种引擎的一种数据库系统;对于操作的存储引擎来说使用不同的引擎,会影响
数据的文件存储方式以及是否支持事务处理功能。
    Myisam:数据操作快速的一种引擎,不支持事务处理功能,支持全文检索。文件保存在数据库名称为目录名的目录中,有3个文件。
    Innodb:功能强大的一种引擎,支持事务处理功能,不支持全文检索。文件保存在两个地方,一个是在数据库名称为目录名的目录中存放表结构文件,它的数据是保存在一个共有的文件中的。

Innodb

表结构文件

数据文件保存在一个共有的文件中

这里写图片描述

myisam

这里写图片描述

它的所有表结构表数据表索引文件都存放在数据库名为目录名的目录中。

这里写图片描述

建议使用innodb引擎。

字符集与校对集

字符集

(摘自百度百科)字符(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等。

校对集

指字符集的排序规则。

字符集有4个级别

服务器级

在安装服务器时指定。

数据库级

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

数据表级

创建数据表时指定,如果不指定,则使用数据库的默认字符集。

字段级

在创建数据表时定义字段属性时指定,如果不指定,则使用数据表的默认字符集。

注意

汉字在Utf8编码下占用3个字节存储空间
汉字在gbk编码下占用2个字节存储空间


不同的字符集存储时会占用不同的空间。

查看数据库支持的字符集
数据库支持的字符集

每一种字符集都有一个默认的校对集与之对应
这里写图片描述

校对集:它是数据比较的一种规则
可以使用下面的命令查看所有的校对集(或者加上筛选条件)
这里写图片描述

每一种校对集都从属于一种字符集。校对集里会指定一种做为默认的校对集。
其实我们在定义数据表和字段时,可以只给出校对集,而不指定字符集。这种情况下会自动把校对集从属的字符集做为其字符集。

校对集有三种方式
Ci:不区分大小写
Cs:区分大小写
Bin:使用二进制去进行比较


使用ci方式创建数据表

create table tb_ci (str varchar(20) collate gbk_chinese_ci);insert into tb_ci values ('A'), ('b'), ('C'), ('d');

查询
这里写图片描述

创建bin校对集的

create table tb_bin (str varchar(20) collate gbk_bin);insert into tb_bin values ('A'), ('b'), ('C'), ('d');

查询
这里写图片描述

它是按照ascii码值来进行的排序

结论:字符集实际上只在字段的定义时设置有价值,但是我们一般不习惯在定义字段时单独定义字符集,而通常是使用表的定义。
校对集对排序有影响

客户端乱码

直接用set name gbk;(代替:character_set_client, character_set_results, character_set_connection)

0 0
原创粉丝点击