MySQL中的JSON数据类型 8 在 JSON 和非 JSON 值之间转换 9 JSON 值的聚合

在 JSON 和非 JSON 值之间转换

下表提供了MySQL在JSON值和其他类型的值之间转换时遵循的规则的摘要:

表 11.3 JSON 转换规则

其他类型CAST(其他类型为 JSON)CAST(JSON AS OTHER TYPE)
断续器无变化无变化
utf8 字符类型 (, ,utf8mb4utf8ascii)该字符串将解析为 JSON 值。JSON 值将序列化为字符串。utf8mb4
其他字符类型其他字符编码将隐式转换为 utf8 字符类型并按照其描述进行处理。utf8mb4JSON 值被序列化为字符串,然后转换为其他字符编码。结果可能没有意义。utf8mb4
NULL生成类型为 JSON 的值。NULL不適用。
几何类型几何值通过调用ST_AsGeoJSON()转换为 JSON 文档。非法操作。解决办法:将CAST(json_val为 CHAR)的结果传递给ST_GeomFromGeoJSON()。
所有其他类型的生成由单个标量值组成的 JSON 文档。如果 JSON 文档由目标类型的单个标量值组成,并且该标量值可以强制转换为目标类型,则成功。否则,将返回并生成警告。NULL
 

ORDER BY对于 JSON 值,它们的工作原理如下:GROUP BY

  • 标量 JSON 值的排序使用与前面讨论中相同的规则。

  • 对于升序排序,SQL在所有JSON值之前排序,包括JSON空文本;对于降序排序,SQL 在所有 JSON 值(包括 JSON 空文本)之后排序。NULLNULL

  • JSON 值的排序键由max_sort_length系统变量的值绑定,因此仅在第一个max_sort_length字节之后不同的键将进行比较。

  • 当前不支持对非标量值进行排序,并且会出现警告。

对于排序,将 JSON 标量转换为其他一些本机 MySQL 类型可能是有益的。例如,如果名为 的列包含具有由键和非负值组成的成员的 JSON 对象,请使用以下表达式按值排序:jdocidid

ORDER BY CAST(JSON_EXTRACT(jdoc, '$.id') AS UNSIGNED)

如果碰巧有一个生成的列被定义为使用与 中相同的表达式,MySQL优化器会认识到这一点,并考虑将索引用于查询执行计划。请参见第 8.3.11 节 "生成的列索引的优化器使用"。ORDER BY

JSON 值的聚合

对于 JSON 值的聚合,将像其他数据类型一样忽略 SQL 值。非值将转换为数值类型并进行聚合,但 MIN()、 MAX()GROUP_CONCAT() 除外。对于作为数字标量的 JSON 值,转换为数字应产生有意义的结果,尽管(取决于值)可能会发生截断和精度损失。转换为其他 JSON 值的数量可能不会产生有意义的结果。NULLNULL

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值