天天看点

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

转载请注明出处,谢谢。

    • 非关系型数据库简介
    • 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

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

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

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

myisam

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

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

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

建议使用innodb引擎。

字符集与校对集

字符集

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

校对集

指字符集的排序规则。

字符集有4个级别

服务器级

在安装服务器时指定。

数据库级

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

数据表级

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

字段级

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

注意

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

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

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

查看数据库支持的字符集

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

每一种字符集都有一个默认的校对集与之对应

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

校对集:它是数据比较的一种规则

可以使用下面的命令查看所有的校对集(或者加上筛选条件)

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

每一种校对集都从属于一种字符集。校对集里会指定一种做为默认的校对集。

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

校对集有三种方式

Ci:不区分大小写

Cs:区分大小写

Bin:使用二进制去进行比较

使用ci方式创建数据表

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

查询

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

创建bin校对集的

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

查询

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

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

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

校对集对排序有影响

客户端乱码

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