Mysql json二进制编码

Posted

技术标签:

【中文标题】Mysql json二进制编码【英文标题】:Mysql json binary encoding 【发布时间】:2022-01-11 05:53:57 【问题描述】:

mysql 是否使用 bson 进行 json 编码?还是它有自定义的二进制编码?例如:

优化的存储格式。存储在 JSON 列中的 JSON 文档被转换为允许对文档元素进行快速读取访问的内部格式。当服务器稍后必须读取以这种二进制格式存储的 JSON 值时,不需要从文本表示中解析该值。二进制格式的结构使服务器能够直接通过键或数组索引查找子对象或嵌套值,而无需读取文档中它们之前或之后的所有值。

https://dev.mysql.com/doc/refman/8.0/en/json.html

【问题讨论】:

我认为答案很简单:不管 MySQL 使用什么,你都无法使用 BSON 与 MySQL 对话;只有“文本”在外面可见。 【参考方案1】:

MySQL 中 JSON 的内部编码并不是真正意义上的 BSON。

https://elephantdolphin.blogspot.com/2019/01/mysql-shell-8014-now-with-bson.html 说:

导入实用程序可以处理使用 JSON 扩展来表示 BSON 数据类型的文档,将它们转换为相同或兼容的 MySQL 表示,并使用该表示导入数据值。

这篇博文的信息是需要将 BSON 转换为存储在 MySQL 中。

但在某些方面,MySQL 的 JSON 的二进制编码与 BSON 具有相似的目标。

MySQL 的 JSON 编码将一些数据类型转换为二进制表示而不是字符串。此外,对象和数组中的每个键和值都包含一种“目录”。

您可以在此处的源代码中阅读有关 MySQL JSON 编码的更多信息:

https://github.com/mysql/mysql-server/blob/8.0/sql/json_binary.h

话虽如此,您无需知道 MySQL 中二进制 JSON 扩展的编码,因为文本 JSON 在插入时转换为二进制,并在提取时转换回文本。

【讨论】:

以上是关于Mysql json二进制编码的主要内容,如果未能解决你的问题,请参考以下文章

mongodb-bson

java编解码技术,json序列化与二进制序列化

如何使用 JSON.NET 使用十六进制编码字符解析格式错误的 JSONP?

mysql字符集

java 按字节读写二进制文件(Base64编码解码)

AVRO 的二进制编码是不是压缩数据?