# MySQL数据库兼容性概述
#### MySQL兼容性M-Compatibility模式概述
[MySQL兼容性M-Compatibility模式](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0544.html)主要介绍GaussDB数据库的MySQL兼容性M-Compatibility模式（即sql_compatibility='M'）与MySQL 5.7数据库的兼容性对比信息。仅介绍505.2版本后新增的兼容性特性，特性的相关规格和约束建议在《M-Compatibility开发指南》中查看。
GaussDB数据库在数据类型、SQL功能和数据库对象等基本功能上与MySQL数据库兼容。
GaussDB的执行计划和优化、EXPLAIN显示结果与MySQL不同。
由于GaussDB数据库与MySQL数据库在底层框架实现上存在差异，GaussDB数据库与MySQL数据库仍存在部分差异。
![](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
由于GaussDB的底层架构与MySQL存在差异，对于information_schema和m_schema下与MySQL名称相同的Schema（具体请参见《M-Compatibility开发指南》中"Schema"章节），其查询性能可能存在差异。例如count函数无法做执行上的优化，表现为SELECT \*和SELECT count(\*)语句耗时近似。
#### MySQL兼容性MYSQL模式概述
[MySQL兼容性MYSQL模式](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0577.html)主要介绍GaussDB数据库的MySQL兼容性MYSQL模式（即sql_compatibility = 'MYSQL'、且设置参数b_format_version='5.7'、b_format_dev_version='s1'时）与MySQL 5.7数据库的兼容性对比信息。仅介绍503.0.0版本后新增的兼容性特性。
![](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
- MySQL兼容性MYSQL模式在语法、数据类型、元数据、协议等功能上对MySQL数据库的兼容度较高。MySQL兼容性MYSQL模式由于架构限制无法很好的与MySQL兼容，后续不再演进。
- 仅在[MySQL兼容性MYSQL模式](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0577.html)中体现的特性行为与MySQL进行了兼容性适配，未体现的特性行为仍然与GaussDB保持一致。
- 当前形态下MYSQL模式（即sql_compatibility='MYSQL'）与集中式形态下B模式（即sql_compatibility='B'）实现逻辑相近。
 
GaussDB数据库在数据类型、SQL功能和数据库对象等基本功能上与MySQL数据库兼容。
由于GaussDB数据库与MySQL数据库在底层框架实现上存在差异，GaussDB数据库与MySQL数据库仍存在部分差异。
#### Database和Schema设计
MySQL的数据对象包括DATABASE、TABLE、INDEX、VIEW、TRIGGER、PROC等，MySQL的对象层次跟GaussDB的对应关系是从上至下且一对多包含关系。如[图1]所示：
图1MySQL和GaussDB中Database和Schema之间的差异   
![](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/figure/zh-cn_image_0000002793708161.png "点击放大")
- 在MySQL中Database和Schema是同义词；而在GaussDB中，一个Database下可以有多个Schema。在该特性中，每个MySQL中的Database都被映射到GaussDB的一个Schema。
- 在MySQL中，INDEX从属于一个TABLE，但在GaussDB中，INDEX从属于一个Schema。这个差异导致INDEX名在GaussDB中要求在Schema内唯一，但在MySQL中仅要在在一个表内唯一。这个差异将作为当前约束予以保留。
 
