---
title: MySQL 和 Databend  区别对比
description: Databend 提供了 MySQL 协议的兼容，但实质上和 MySQL 还有一定的区别。Databend 定位在基于对象存储实现一个真正的存算分离的弹性数仓。现在也在有很多朋友利用 Databend 做 MySQL 和 RDS MySQL 的归档存储分析。
slug: category-engineering/mysql-databend-diff
date: 2023-03-01
tags: [engineering]
category: Engineering
cover_url: mysql-databend.png
image: mysql-databend.png
authors:
  - wubx
---

Databend 提供了 MySQL 协议的兼容，但实质上和 MySQL 还有一定的区别。Databend 定位在基于对象存储实现一个真正的存算分离的弹性数仓。现在也在有很多朋友利用 Databend 做 MySQL 和 RDS MySQL 的归档存储分析。

{/* truncate */}

这里给大家介绍一下 Databend 数据类型，索引，DDL，协议 几方面和 MySQL 的区别，其中文章最后一条可能减少你使用很多麻烦，以下详细内容供大家参考：

## 1. 数据类型

| Type      | Databend | MySQL |
| --------- | -------- | ----- |
| tinyint   | Yes      | Yes   |
| smallint  | Yes      | Yes   |
| mediumint | No       | Yes   |
| int       | Yes      | Yes   |
| bigint    | Yes      | Yes   |

## 2. 浮点类型

| Type    | Databend | MySQL |
| ------- | -------- | ----- |
| decimal | Yes      | Yes   |
| float   | Yes      | Yes   |
| double  | Yes      | Yes   |

## 3. 日期类型

| Type      | Databend | MySQL |
| --------- | -------- | ----- |
| datetime  | Yes      | Yes   |
| timestamp | Yes      | Yes   |
| date      | No       | Yes   |
| time      | No       | Yes   |
| year      | No       | Yes   |

在 Databend 中 datetime 实质上是 timstamp 的同义词，现在支持 6 位精度：`YYYY-MM-DD hh:mm:ss`[.fraction] 。

## 4. 字符类型

| Type      | Databend | MySQL |
| --------- | -------- | ----- |
| varchar   | Yes      | Yes   |
| string    | Yes      | No    |
| binary    | No       | Yes   |
| varbinary | No       | Yes   |
| blog      | No       | Yes   |
| enum      | No       | Yes   |
| set       | No       | Yes   |

> 在 Databend 中 string 是 Varchar 的同义词，另外使用需要注意在 Databend 声明 Varchar 不需要声明长度，存储按实际长度存储

## 5. JSON 类型

| Type    | Databend | MySQL |
| ------- | -------- | ----- |
| json    | Yes      | Yes   |
| variant | Yes      | No    |

> Databend 中 json 基于 jsonb 实现，函数上和 MySQL 不一样，参考：https://docs.databend.cn/sql/sql-functions/semi-structured-functions/
>
> json 格式建议只是使用在数据清洗过程

## 6. 嵌套类型

| Type  | Databend | MySQL |
| ----- | -------- | ----- |
| array | Yes      | No    |
| tuple | Yes      | No    |

Databend 主要定位在大数据解环境，对于数据格式支持更加利于使用一点。后续马上会加一个 map 类型。

## 7. 其它数据类型

| Type    | Databend | MySQL |
| ------- | -------- | ----- |
| bit     | No       | Yes   |
| boolean | Yes      | No    |

> 如你用 MySQL 的习惯使用 Databend 需要别小心 Databend 的 Boolean 类型，MySQL 没有 Boolean 类型，一般是使用 tinyint 中的 0 和 1 表示。

## 8. 索引上区别

在 Databend 中不用定义索引，默认情况下每一列都自带 min/max, bloom index 索引，在 Databend 中也没有唯一约束，外键等。这里使用上也需注意一下。

## 9. DDL 支持

目前 Databend 已经支持无 Block 实现 alter table 操作。

> 参考：https://docs.databend.cn/sql/sql-commands/ddl/table/alter-table-column

## 10. 协议和一些细节

Databend 支持 MySQL 协议 和 Clickhouse HTTP 协议，同时也支持 HTTP Restful API 设计。

> 参考：https://docs.databend.cn/developer/apis/http

Databend 在双引号和单引号这块参考了 PostgreSQL 明确约束，如果你是 MySQL 使用的风格的用户可以通过：

```
set global sql_dialect='MySQL';
```

把 SQL 会话习惯更改成：MySQL 风格。

Databend 默认时区是：timezone= UTC，如果你在国内使用可以通过：

```
 set global timezone='Asia/Shanghai';
```

## 小结

现在 Databend 和 MySQL 结构的场景

- 使用 Databend 使用对象存储的成本优势担任 MySQL 的数据归档和分析

- 使用 Databend 担任 MySQL 的离线 AP 库

- 使用 Databend 把线上的分库分表的库合并到一起

## Connect With Us

Databend 是一款开源、弹性、低成本，基于对象存储也可以做实时分析的新式数仓。期待您的关注，一起探索云原生数仓解决方案，打造新一代开源 Data Cloud。

- [Databend Cloud](https://databend.cn)
- [Databend Website](https://docs.databend.cn)
- [GitHub Discussions](https://github.com/databendlabs/databend/discussions)
- [Twitter](https://twitter.com/Datafuse_Labs)
- [Slack Channel](https://link.databend.com/join-slack)
