MySQL JSON_STORAGE_SIZE() 函数使用指南

MySQL JSON_STORAGE_SIZE() 函数返回存储一个 JSON 文档的二进制表示所占用的字节数。

JSON_STORAGE_SIZE() 语法

这里是 MySQL JSON_STORAGE_SIZE() 的语法:

JSON_STORAGE_SIZE(json)

参数

json
必需的。一个 JSON 文档。它可以是一个 JSON 字符串,或者一个 JSON 列。

返回值

MySQL JSON_STORAGE_SIZE() 函数返回存储一个 JSON 文档的二进制表示所占用的字节数。它可以接受一个 JSON 字符串,或者一个 JSON 列作为参数。

如果参数是一个 JSON 字符串,JSON_STORAGE_SIZE() 函数返回由 JSON 字符串解析成的 JSON 类型的值存储时所占用的字节数。

如果参数是一个 JSON 列,JSON_STORAGE_SIZE() 函数返回插入到列中的 JSON 文档所占用的存储空间。当然,这个数字可能随着以后更新而变化。

如果参数为 NULLJSON_STORAGE_SIZE() 函数返回 NULL

如果参数 json 不是有效的 JSON 文档,MySQL 将会给出错误。您可以使用 JSON_VALID() 验证 JSON 文档的有效性。

JSON_STORAGE_SIZE() 示例

示例: 数字

SELECT
    'Size' AS `Json`,
    JSON_STORAGE_SIZE('0') AS `0`,
    JSON_STORAGE_SIZE('1') AS `1`,
    JSON_STORAGE_SIZE('1000') AS `1000`,
    JSON_STORAGE_SIZE('100000') AS `100000`;
+------+---+---+------+--------+
| Valu | 0 | 1 | 1000 | 100000 |
+------+---+---+------+--------+
| Size | 3 | 3 |    3 |      5 |
+------+---+---+------+--------+

示例: 字符串

SELECT
    'Size' AS `Json`,
    JSON_STORAGE_SIZE('"a"') AS `a`,
    JSON_STORAGE_SIZE('"Hello World"') AS `Hello World`;
+------+---+-------------+
| Json | a | Hello World |
+------+---+-------------+
| Size | 3 |          13 |
+------+---+-------------+

示例: 布尔值

SELECT
    'Size' AS `Json`,
    JSON_STORAGE_SIZE('true') AS `true`,
    JSON_STORAGE_SIZE('false') AS `false`;
+------+------+-------+
| Json | true | false |
+------+------+-------+
| Size |    2 |     2 |
+------+------+-------+

从结果我们看出,存储 JSON 布尔值 true 或者 false 占用 2 个字节。

示例: null

SELECT
    'Size' AS `Json`,
    JSON_STORAGE_SIZE('null') AS `null`;
+------+------+
| Json | null |
+------+------+
| Size |    2 |
+------+------+

从结果我们看出,存储 JSON null 值占用 2 个字节。

示例: 数组和对象

SELECT
    'Size' AS `Json`,
    JSON_STORAGE_SIZE('[1, 2]') AS `[1, 2]`,
    JSON_STORAGE_SIZE('[1, 2, 3]') AS `[1, 2, 3]`,
    JSON_STORAGE_SIZE('{"x": 1}') AS `{"x": 1}`,
    JSON_STORAGE_SIZE('{"x": 1, "y": 2}') AS `{"x": 1, "y": 2}`;
+------+--------+-----------+----------+------------------+
| Json | [1, 2] | [1, 2, 3] | {"x": 1} | {"x": 1, "y": 2} |
+------+--------+-----------+----------+------------------+
| Size |     11 |        14 |       13 |               21 |
+------+--------+-----------+----------+------------------+

示例:字段

本示例说明了如何使用 JSON_STORAGE_SIZE() 函数计算一个 JSON 列占用的空间。

首先,让我们先创建一个表 test_json_storage_size

DROP TABLE IF EXISTS test_json_storage_size;
CREATE TABLE test_json_storage_size (
    json_col JSON NOT NULL
);

然后,让我们插入 1 行数据以供测试使用:

INSERT INTO test_json_storage_size
VALUES ('{"x": 1, "y": 2}');

然后,让我们使用 JSON_STORAGE_SIZE() 函数查看 json_col 占用的存储空间:

SELECT
    json_col,
    JSON_STORAGE_SIZE(json_col)
FROM
    test_json_storage_size;
+------------------+-----------------------------+
| json_col         | JSON_STORAGE_SIZE(json_col) |
+------------------+-----------------------------+
| {"x": 1, "y": 2} |                          21 |
+------------------+-----------------------------+

接着,让我们修改一下 JSON 列的值:

UPDATE test_json_storage_size
SET json_col = '{"x": 1, "y": 2, "z": 3}';

最后,让我们 JSON_STORAGE_SIZE() 函数查看 json_col 占用的存储空间:

SELECT
    json_col,
    JSON_STORAGE_SIZE(json_col)
FROM
    test_json_storage_size;
+--------------------------+-----------------------------+
| json_col                 | JSON_STORAGE_SIZE(json_col) |
+--------------------------+-----------------------------+
| {"x": 1, "y": 2, "z": 3} |                          29 |
+--------------------------+-----------------------------+

我们发现 JSON_STORAGE_SIZE() 返回值发生了变化,这是因为 JSON 字段的值已经发生了变化。