> ## 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.

# MySQL 的 vsql_boolean 扩展

> vsql_boolean 扩展为 MySQL 添加 STRICTBOOL 列类型，它存储一个字节，接受 true/false、yes/no 和 on/off，并拒绝其他任何值。

MySQL 没有布尔类型。`BOOL` 是 `TINYINT(1)` 的别名，它接受 `5` 和 `-1`
就像接受 `1` 一样轻松，并原样返回它们。`vsql_boolean` 添加了一个
`STRICTBOOL` 列类型，它存储一个字节，只保存两个值。

| | |
| - | - |
| **维护者** | VillageSQL |
| **源代码和完整文档** | [villagesql/vsql-boolean](https://github.com/villagesql/vsql-boolean) |
| **许可证** | GPL-2.0 |

## 安装

如果您使用安装脚本、Docker 镜像或发行版压缩包安装了 VillageSQL，
`vsql_boolean.veb` 已经位于服务器的 `lib/veb/` 目录中。
用一条语句将它安装到服务器中：

```sql theme={null}
INSTALL EXTENSION vsql_boolean;
```

确认它已存在：

```sql theme={null}
SELECT EXTENSION_NAME
FROM INFORMATION_SCHEMA.EXTENSIONS
WHERE EXTENSION_NAME = 'vsql_boolean';
```

```
+----------------+
| EXTENSION_NAME |
+----------------+
| vsql_boolean   |
+----------------+
```

要自行构建，请按照[存储库](https://github.com/villagesql/vsql-boolean)中的
构建说明进行操作。

## 新增内容

### STRICTBOOL 类型

`STRICTBOOL` 列接受字符串 `'true'`/`'false'`、`'t'`/`'f'`、
`'yes'`/`'no'`、`'on'`/`'off'` 和 `'1'`/`'0'`，不区分大小写。请以字符串
形式传入：裸数字会被拒绝。无论以哪种形式写入，它都读回为 `true` 或
`false`，并且占用一个字节。

```sql theme={null}
CREATE TABLE flags (
    id     INT PRIMARY KEY,
    name   VARCHAR(16),
    active STRICTBOOL
);
```

### 函数

| 函数 | 返回 | 作用 |
| - | - | - |
| `boolean_to_int(b)` | 整数 | true 为 1，false 为 0 |
| `boolean_sum(b)` | 整数 | 聚合：组内有多少行为 true |
| `boolean_avg(b)` | 实数 | 聚合：为 true 的比例，忽略 NULL |

## 示例

```sql theme={null}
INSERT INTO flags VALUES
    (1, 'alpha', 'true'),
    (2, 'beta',  'no'),
    (3, 'gamma', 'on'),
    (4, 'delta', '0');

SELECT name, active FROM flags;
```

```
+-------+--------+
| name  | active |
+-------+--------+
| alpha | true   |
| beta  | false  |
| gamma | true   |
| delta | false  |
+-------+--------+
```

写入了四种拼写，读回的只有两个值。统计一下：

```sql theme={null}
SELECT boolean_sum(active) AS enabled, ROUND(boolean_avg(active), 2) AS fraction
FROM flags;
```

```
+---------+----------+
| enabled | fraction |
+---------+----------+
|       2 |      0.5 |
+---------+----------+
```

> [!NOTE]
>
> 接受的拼写之外的任何值都会在插入时被拒绝：
> `INSERT INTO flags VALUES (5, 'eps', 'maybe')` 失败并报
> `ERROR 1366 (HY000): Incorrect STRICTBOOL value: 'maybe' for column 'active'
>     at row 1`。不加引号的 `1` 同样失败，报
> `ERROR 3219 (HY000): Incorrect STRICTBOOL value: '1' for column 'active' at
>     row 1`。

## 另请参阅

* [MySQL 中真正的布尔值](https://villagesql.com/docs/en/guides/boolean-columns.md) — 迁移 TINYINT(1) 列，以及聚合函数如何处理 NULL
* [选择数据类型](https://villagesql.com/docs/en/guides/choosing-data-types.md) — 更窄的类型何时值得使用
* [安装扩展](https://villagesql.com/docs/zh/extensions/install.md) — `INSTALL EXTENSION` 如何工作，以及服务器在哪里查找包
* [可用扩展](https://villagesql.com/docs/zh/extensions/catalog) — 完整目录
* [villagesql/vsql-boolean](https://github.com/villagesql/vsql-boolean) — 源代码、构建说明和已知限制


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.