> ## Documentation Index
> Fetch the complete documentation index at: https://villagesql.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# 版本策略

> 了解 VillageSQL 的版本管理规范和 MySQL 兼容性矩阵。

## 概述

VillageSQL 遵循明确的版本控制和兼容性策略，以帮助您做出关于部署和升级的明智决策。

## VillageSQL 版本控制

VillageSQL 使用 [语义化版本](https://semver.org/) (SemVer) 来传达每个版本中更改的性质和影响。

### 版本格式

版本遵循以下格式：**MAJOR.MINOR.PATCH**

```
0.0.1
│ │ │
│ │ └─ PATCH version
│ └─── MINOR version
└───── MAJOR version
```

### 版本递增规则

* **MAJOR 版本**（例如，1.0.0 → 2.0.0）：可能需要代码修改或数据库迁移的重大更改
* **MINOR 版本**（例如，0.1.0 → 0.2.0）：以向后兼容的方式添加的新功能
* **PATCH 版本**（例如，0.0.1 → 0.0.2）：向后兼容的错误修复和次要改进

<Note>
  VillageSQL 目前处于 1.0 之前的开发阶段（版本 0.x.x）。在此阶段，API 和扩展接口可能会更频繁地更改，随着平台逐步稳定。
</Note>

### 开发版本

带有预发布后缀的版本（例如，`0.0.4-dev`）是开发版本。默认情况下，服务器会阻止从使用开发版本初始化的数据库进行升级。开发版本未经过升级兼容性测试，并且可能包含破坏性模式或协议更改。

要允许这样做，请使用 `--villagesql-allow-unsafe-dev-upgrade` 启动服务器：

```bash theme={null}
mysqld --villagesql-allow-unsafe-dev-upgrade --datadir=/path/to/data
```

如果没有该标志，如果服务器检测到开发版本数据库，则会出错退出：

```
Upgrading from a development version (0.0.4-dev) is not allowed. Use --villagesql-allow-unsafe-dev-upgrade to permit this.
```

如果使用了该标志，服务器会记录警告并继续：

```
Upgrading from a development version (0.0.4-dev); --villagesql-allow-unsafe-dev-upgrade was specified.
```

如果指定了该标志但当前版本不是开发版本，服务器将出错退出：

```
--villagesql-allow-unsafe-dev-upgrade specified, but current version (0.0.3) is not a development version.
```

或者如果没有执行模式升级：

```
--villagesql-allow-unsafe-dev-upgrade specified, but no upgrade is being performed.
```

## 扩展兼容性

VillageSQL 扩展是特定于版本的。为 VillageSQL 的一个版本构建的扩展可能无法与另一个版本一起工作。

升级 VillageSQL 时：

1. 检查新版本的扩展兼容性
2. 根据需要更新或重新构建扩展
3. 在生产环境中部署之前，在开发环境中测试扩展

请参阅 [升级指南](/docs/guides/upgrade)，了解详细的升级步骤。

## 从 0.0.3 版本的 SDK 更改

**协议 2 扩展必须重新构建。** VEF 协议 3 自 v0.0.4 起已稳定，服务器现在会在加载时拒绝协议 2 扩展。使用类型化包装器（`StringArg`、`IntArg`、`StringResult` 等）针对协议 3 API 进行重新构建。

**`vef_version_t::extra` 类型已更正为 `const char*`。** 在 0.0.3 中，该字段为 `unsigned char*`。大多数扩展不会直接访问它——它是由 SDK 从您的 `manifest.json` 版本字段中填充的。如果您的扩展程序确实访问它，请在针对 0.0.4 SDK 编译时删除任何 `(unsigned char *)` 强制类型转换。
